具有泛型类型的C#属性

you*_*hut 11 .net c# generics

我有一节课:

public class class1
{
public string Property1 {get;set;}
public int Property2 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

哪个将被实例化:

var c = new class1();
c.Property1 = "blah";
c.Property2 = 666;
Run Code Online (Sandbox Code Playgroud)

所以忍受我(我是泛型的新手),我需要另一个具有泛型类型属性的类,以便可以使用Property1或Property2来设置Property3:

public class Class2
{
public GenericType Property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我希望能够:

var c2 = new class2();
c2.Property3 = c1.Property2 // Any property of any type.
Run Code Online (Sandbox Code Playgroud)

Jon*_*onH 11

@bytenik我认为发起人要求将class3定义为包含泛型属性.这样他/她有一个来自class1或class2的属性,在这种情况下是一个字符串/ int,class3的属性可以处理这两种情况.

public class Class3<T>
{
 public T Property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我认为意图是海报想要这样做:

Class3.Property3 = Class2.Property2
Run Code Online (Sandbox Code Playgroud)

我认为海报需要将它投射到T型才能实现.

查看为示例发布的链接:创建一个通用属性

这是你可以做的:

namespace GenericSO
{
    public class Class1
    {
        public int property1 { get;set;}

    }

    public class Class2<T>
    {
        public T property2 { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            c1.property1 = 20;

            Class2<int> c2 = new Class2<int>();

            c2.property2 = c1.property1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意您的模板property2如何获取property1的值.你必须告诉它什么样的泛型.


Vit*_*sky 7

public class class1<T>
{
public T Property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

关于问题的编辑版本:

如果你需要一个可以用任何类型设置的属性,这里最合理的解决方案是简单地使用Object类型的属性.对于C#编译器,无法找到您之前推入属性设置器的确切类型的实例.