将不同类型的变量分配给一种类型

时间:2015-07-10 15:38:52

标签: c# type-conversion

作为我所处理的非常简化和愚蠢的例子,假设我有以下类,其中包含一个简单的静态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");

我很想知道是否有更好的方法来实现这一点,而不是必须添加额外的方法。

3 个答案:

答案 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#中走开以获得动态类型。

从维护的角度来看,这可能是一个痛苦的屁股。 我会更多地考虑一下您试图解决的潜在问题导致这个问题。