C# 定义可以是多种数据类型的类成员

C# 定义可以是多种数据类型的类成员,c#,C#,我有一个类成员,可以获取多种数据类型,如下图所示 我如何在类中定义这样一个数据成员,它可以从上述类型之一获取数据类型。谢谢将其声明为对象,您可以稍后使用is对其进行测试: public object MyProperty { get; set; } public void DoSomething() { if(MyProperty is bool) { bool mp = MyProperty as bool; // do something w

我有一个类成员,可以获取多种数据类型,如下图所示


我如何在类中定义这样一个数据成员,它可以从上述类型之一获取数据类型。谢谢

将其声明为
对象
,您可以稍后使用
is
对其进行测试:

public object MyProperty { get; set; }

public void DoSomething()
{
    if(MyProperty is bool)
    {
        bool mp = MyProperty as bool;
        // do something with boolean type mp
    }
    else if(MyProperty is string)
    {
        string mp = MyProperty as string;
        // do something wit string type mp
    }
    // ....
}
在较新版本的Visual Studio(我认为是2015版以上)中,您可以将类型检查和强制转换结合起来:

public void DoSomething()
{
    if(MyProperty is bool mp)
    {
        // do something with boolean type mp
    }
    else if(MyProperty is string mp)
    {
        // do something wit string type mp
    }
    // ....
}

与泛型类相比,这种方法的好处是,属性类型可以在对象生命周期内更改。

在大多数语言中,对象数据类型是所有其他数据类型继承而来的

您可以使用泛型类:

public class MyThing<T>
{
    public T MyProperty { get; set; }
}
公共类神话
{
公共MyT属性{get;set;}
}
现在您要说明创建类时的类型:

var myIntObject = new MyThing<int>();
var myStringObject = new MyThing<string>();

myIntObject.MyProperty = 5;
myStringObject.MyProperty = "Hello world";
var myIntObject=newmything();
var myStringObject=newmything();
MyInObject.MyProperty=5;
myStringObject.MyProperty=“你好世界”;

对象是常见的数据类型,您可以通过这种方式对其进行操作

    private object _classmember;
    public object classmember
    {
        get { return _classmember; }
        set
        {
            _classmember = value;
            if (_classmember.GetType()==typeof(Boolean))
            {
              //Do your stuff
               MessageBox.Show("boolean");
            }

            if (_classmember.GetType() == typeof(int))
            {
              //Do your stuff
                MessageBox.Show("int");
            }

            if (_classmember.GetType() == typeof(double))
            {
              //Do your stuff
                MessageBox.Show("double");
            }
              //Declare all the necessary datatypes like the above
        }
    }
用法如下

       classmember = true;
        classmember = 1;
        classmember = 6.6;

创建一个对象。创建一个泛型类,并在实例化时定义类型泛型是否适合您?C#是一种静态类型语言。变量一旦赋值就不能在其生命周期内更改其数据类型。如果您能解释一下您想要做什么,那就更好了。我喜欢这种方法。但如果赋值的类型在对象的生存期内可能发生变化,则它有一个限制。我们不能不告诉OP更多关于他的用例就知道它。如果类型不会改变,那么泛型方法是非常干净的是的,这是可能的,但我认为如果数据类型在对象的生命周期内发生变化,有一种代码味道可能需要修复。我完全同意我们都选择Hello World作为字符串,选择5作为int:D。我将删除我的答案。为了支持多种类型。因此,您可以在需要时使用类型安全性,在不需要时禁用它。