C# 基于泛型的成员名称 < >在C++中,是否可以使用某种类型的预处理器(或任何东西),如C++中的,可以使用类型名或泛型类型作为代码中的标识符?p> public abstract class PropSC<T1, T2, T3> { public T1 T1 { get; set; } public T2 T2 { get; set; } public T3 T3 { get; set; } }

C# 基于泛型的成员名称 < >在C++中,是否可以使用某种类型的预处理器(或任何东西),如C++中的,可以使用类型名或泛型类型作为代码中的标识符?p> public abstract class PropSC<T1, T2, T3> { public T1 T1 { get; set; } public T2 T2 { get; set; } public T3 T3 { get; set; } },c#,generics,C#,Generics,这在C#中可能吗?不,这在使用泛型时是不可能的。标识符需要在编译时已知,但泛型类型可以在运行时生成(例如使用) 如果你真的需要这个,你必须使用某种代码生成工具 虽然不可能完全按照您所描述的那样做(没有反射器或其他纯粹的邪恶来源),但这与您所描述的类似: public class Property<T1> { T1 _t1; T1 Get<T1>() { return _t1; } void Set<T1>(T1

这在C#中可能吗?

不,这在使用泛型时是不可能的。标识符需要在编译时已知,但泛型类型可以在运行时生成(例如使用)


如果你真的需要这个,你必须使用某种代码生成工具

虽然不可能完全按照您所描述的那样做(没有反射器或其他纯粹的邪恶来源),但这与您所描述的类似:

public class Property<T1> {
    T1 _t1;
    T1 Get<T1>() {
        return _t1;
    }

    void Set<T1>(T1 t1) {
        _t1 = t1;
    }
}

// C# doesn't have variadic generics, but you could do something like this
// to get multiple type arguments
public class Property<T1, T2> : Property<T1> {
    T2 _t2;
    T2 Get<T2>() {
        return _t2;
    }

    void Set<T2>(T2 t2) {
        _t2 = t2;
    }
}
public class Property<T1, T2, T3> : Property<T1, T2> {
    T3 _t3;
    T3 Get<T3>() {
        return _t3;
    }

    void Set<T3>(T3 t3) {
        _t3 = t3;
    }
}
public class Property<T1, T2, T3, T4> : Property<T1, T2, T3> {
// ...
公共类属性{
T1 T1;
T1 Get(){
返回t1;
}
空集(T1){
_t1=t1;
}
}
//C#没有变量泛型,但你可以这样做
//获取多个类型参数的步骤
公共类属性:属性{
T2 T2;
t2get(){
返回t2;
}
空集(T2){
_t2=t2;
}
}
公共类属性:属性{
T3-T3;
T3 Get(){
返回t3;
}
空集(T3){
_t3=t3;
}
}
公共类属性:属性{
// ...
不,后一部分不是,因此您可能希望最终将此方法与一些反射合并。为了完整性起见,以下是您如何使用它:

public class SomeClass : Property<Thing1, Thing2, Thing3> { }

SomeClass someClass = new SomeClass();
someClass.Get<Thing1>();
someClass.Get<Thing2>();
someClass.Get<Thing3>();
public类SomeClass:Property{}
SomeClass SomeClass=新的SomeClass();
someClass.Get();
someClass.Get();
someClass.Get();

不,这是不可能的。您只能使用
CSharpCodeProvider
动态编译代码。但是使用起来很不方便。@Dmitry,我相信团队会不同意您的意见。@FrédéricHamidi Roslyn尚未正式发布。它仍处于测试阶段。@Servy,它肯定会正式发布(NuGet软件包和所有软件),但你是对的,这仍然是一个技术预览,还有一些问题需要解决。
public class Property<T1> {
    T1 _t1;
    T1 Get<T1>() {
        return _t1;
    }

    void Set<T1>(T1 t1) {
        _t1 = t1;
    }
}

// C# doesn't have variadic generics, but you could do something like this
// to get multiple type arguments
public class Property<T1, T2> : Property<T1> {
    T2 _t2;
    T2 Get<T2>() {
        return _t2;
    }

    void Set<T2>(T2 t2) {
        _t2 = t2;
    }
}
public class Property<T1, T2, T3> : Property<T1, T2> {
    T3 _t3;
    T3 Get<T3>() {
        return _t3;
    }

    void Set<T3>(T3 t3) {
        _t3 = t3;
    }
}
public class Property<T1, T2, T3, T4> : Property<T1, T2, T3> {
// ...
public class SomeClass : Property<Thing1, Thing2, Thing3> { }

SomeClass someClass = new SomeClass();
someClass.Get<Thing1>();
someClass.Get<Thing2>();
someClass.Get<Thing3>();