C#将字符串转换为大小

本文关键字:转换 字符串 | 更新日期: 2023-09-27 17:58:14

嘿,有没有办法将字符串变量转换为Size数据类型?

例如,如果我有这个可变

字符串tempSize;

如何将其转换为dataTypeSize以供阅读??

C#将字符串转换为大小

您指的是哪种尺寸?

如果您指的是System.Windows.Size,则有一个Size.Parse(字符串)方法。

如果你指的是System.Drawing.Size,没有内置的解析方法,你必须自己解析字符串。

我们谈论的是Winforms中使用的System.Drawing.Size结构,是吗?

如上所述,此结构没有Parse()函数。所以你必须自己做。一种选择是格式化和解析自己设计的字符串:

// format a custom string to encode your size
string mySizeString = string.Format("{0}:{1}", mySize.Width, mySize.Height);
// parse your custom string and make a new size
string[] sizeParts = mySizeString.Split(':');
int height = int.Parse(sizeParts[0]);
int width = int.Parse(sizeParts[1]);
Size mySize = new Size(height, width);

另一种选择是使用TypeConverter类为您进行格式化和解析:

// convert a Size to a string using a type converter
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Size));
string mySizeString = tc.ConvertToString(mySize);
// convert a string to a Size using a type converter
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Size));
Size mySize = (Size)tc.ConvertFromString(mySizeString);

也许最后一个解决方案正好适合您(哈尔)。无论如何,我相信有些聪明的人已经编写了扩展函数来以这种方式扩展Size结构。那太棒了!

我成功地以类似于"1100700"的格式对字符串调用了System.Windows.Size.Parse。

如今,您可以使用扩展方法为字符串类创建Parse方法:

public static Size Parse(this string str) ...

让我展示一些我必须编写的代码,因为Size应该通过WxH形式的URL参数传入,例如1024x768:

namespace MySize
{
    public static class Extensions
    {
        public static Size Parse(this string str)
        {
            try {
                var a = str.Split(new char[] { 'x' });
                return new Size() { 
                    Width = int.Parse(a[0]), 
                    Height = int.Parse(a[1]) 
                };
            }
            catch(Exception) { }
            return Size.nosize;
        }
    }
    public class Size
    {
        public int Width { get; set; }
        public int Height { get; set; }
        public override string ToString()
        {
            return Width.ToString() + "x" + Height.ToString();
        }
        public Size(System.Drawing.Size from)
        {
            Width = from.Width;
            Height = from.Height;
        }
        public Size()
        {
        }
        public static Size nosize = new Size(new System.Drawing.Size(-1, -1));
    }
//[..]
}

这样,您就可以为类使用ToString()方法,并为字符串(或string)使用相应的Parse方法。下面是一个测试用例:

    [TestMethod]
    public void TestSizeParse()
    {
        var s1 = new Size(1024, 768);
        var s1Str = s1.ToString();
        Size s2 = s1Str.Parse();
        Assert.AreEqual(s1.Width, s2.Width);
        Assert.AreEqual(s1.Height, s2.Height);
        Assert.AreEqual(s1, s2, "s1 and s2 are supposed to be equal");
    }

Size是一个具有Width和Height的结构。

您需要两个整数来生成它,使用Size(width,height)构造函数。

您应该找到一种使用Int32.parse或其他方法从字符串中提取整数的方法。使用提取的整数来构造Size。

可能:

int size=Convert.ToInt32(tempSize);

更新

您必须在两个int中解析tempSize,然后调用:

Size = New Drawing.Size(xSize, ySize) 

我猜您有一个格式为"123;456"的字符串,因为这是Size结构体使用的格式。

要将其解析为System.Drawing.Size,可以执行以下操作:

string s = "123; 456";
int width, height;
string[] dims = s.Split(';');
int.TryParse(dims[0], out width);
int.TryParse(dims[1], out height);
System.Drawing.Size size = new System.Drawing.Size(width, height);

如果字符串没有;,则此操作将失败;如果字符串不可解析,则将为数字返回0。

IMHO目前可读性和可解析性最好的格式是JSON。

因此,您可以使用JavaScriptSerializer将Size对象从JSON转换为JSON。由于Size.ToString()的默认实现也提供了相当不错的输出,因此可以使用:

        var json = new JavaScriptSerializer();
        var s1 = new Size(5, 125);
        var serialized = s1.ToString().Replace("=",":"); 
        Console.WriteLine(serialized);
        var s2 = json.Deserialize<Size>(serialized);
        Console.WriteLine(s2);

这将呈现以下输出:

  {Width:5, Height:125}
  {Width=5, Height=125}