作为我所处理的非常简化和愚蠢的例子,假设我有以下类,其中包含一个简单的静态int
属性:
public class MyClass
{
public static int MyVar { get; set; }
}
所以,如果我想通过代码设置该属性,那么用以下内容就很容易了:
MyClass.MyVar = 2;
但是,我如何处理(再次,简化示例)传入string
并将其转换为int
?
我能想到的唯一方法就是创建一个辅助方法,例如:
public class MyClass
{
public static int MyVar { get; private set; }
public static void SetMyVar(string sMyVar)
{
MyVar = int.Parse(sMyVar);
}
}
然后在代码运行中:
MyClass.SetMyVar("2");
我很想知道是否有更好的方法来实现这一点,而不是必须添加额外的方法。
答案 0 :(得分:2)
虽然你绝对不应该这样做因为阅读困惑,你可以以这种方式创建属性
class MyClass
{
private static int _property = 0;
public static object Property
{
get
{
return _property;
}
set
{
_property = Convert.ToInt32(value);
}
}
}
每当你想把它作为一个整数使用时,你就必须将它强制转换为int,但这是我能想到的最好的。
答案 1 :(得分:0)
这是你想要做的吗?
class newclass
{
private static int MyVarValue = 0;
public static int MyVar
{
get;
set
{
MyVarValue = Convert.ToInt32(value);
}
}
}
这不会编译,因为属性设置为的值必须与属性本身的类型相同。但是如果您在构造函数中获取对象列表并将它们分配给属性,那么您可以执行以下操作...
class newclass
{
private static int MyVarValue = 0;
public newclass(List<object> startingList)
{
MyVarValue = Convert.ToInt32(startingList[0]);
}
}
答案 2 :(得分:0)
您可以使用编译器的方法重载决策来根据参数的类型选择SetMyValue方法。在每个SetMyValue方法中,您都有一种机制可以将所有不同的输入值转换为相同的基础类型。
这样做可能是一个坏主意 - 但无论如何都要这样做。它没有你要求的语义,但它很接近:
//A class with multiple 'set' methods that will silently handle
//type conversions
class MyClass{
private int myValue;
public int MyValue { { get return this.myValue; } }
public void SetMyValue(int value){
this.myValue = value;
}
public void SetMyValue(string value){
this.myValue = Convert.ToInt32(value);
}
}
在静态类型语言中,以丢失信息的方式静默切换类型并不是一个明智的想法。还有其他动态类型语言可以让你快速和松散地使用类型,但C#不是其中之一。你必须在C#中走开以获得动态类型。
从维护的角度来看,这可能是一个痛苦的屁股。 我会更多地考虑一下您试图解决的潜在问题导致这个问题。