C#将字符串转换为大小
本文关键字:转换 字符串 | 更新日期: 2023-09-27 17:58:14
嘿,有没有办法将字符串变量转换为Size数据类型?
例如,如果我有这个可变
字符串tempSize;
如何将其转换为dataTypeSize以供阅读??
您指的是哪种尺寸?
如果您指的是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}