gpt4 book ai didi

c# - 类型参数的约束,是否可以有可选类型

转载 作者:行者123 更新时间:2023-11-30 17:42:06 24 4
gpt4 key购买 nike

我一直在阅读 documentation here而且我无法到达我可以实现我需要的地方 - 对类型参数的约束有点重载。我“技术上”不知道如何调用它,因此我提到了“过载”。这是我要实现的目标的示例:

class Test<T> {
private Test(string x) {
}

public static Test<T> OpTest(T t) {
return new Test<T>("test string") {
Value = t,
}
}

public T Value1 {get;set;}
public string X {get;set;}
}

// Sample usage
var result = Test<SomeClass>.OpTest(instanceOfSomeClass);

这就是我想要的...

//... that I can do this
var result = Test<SomeClass>.OpTest(instanceOfSomeClass);
//and also sometimes this
var anotherResult = Test<SomeClass, SomeOtherClass>
.OpTest(instanceOfSomeClass, instanceOfSomeOtherClass);

我可以通过创建另一个具有不同约束的类来实现这一点:

class Test<T, U> : Test<T> {
private Test(string x):base(x) { }
public static Test<T, U> OpTest(T t, U u) {
return new Test<T, U>("test string") {
Value1 = T,
Value2 = U,
}
}

public U Value2 {get;set;}
}

虽然这按照我想要的方式工作,但我觉得有些地方不对劲。是吗?或者有更好的方法吗?此外,我只是不觉得这是错误的,但我现在必须在 Test<T> 之间复制(复制+粘贴)一些逻辑。和 Test<T,U> .

最佳答案

干的写法:

class Test<T> {
private Test(string x) {
}

public static Test<T> OpTest(T t) {
return new Test<T>("test string") {
Value1 = t,
}
}

public T Value1 {get;set;}
public string X {get;set;}
}

class TestExtra<T, U> : Test<T> {
private TestExtra(string x) : base(x) {
}

public static TestExtra<T, U> OpTestExtra(T t, U u) {
return new Test<T>("test string") {
Value1 = t,
Value2 = u
}
}

public U Value2 {get;set;}
}


var result = Test<SomeClass>.OpTest(instanceOfSomeClass);
var anotherResult = TestExtra<SomeClass, SomeOtherClass>
.OpTestExtra(instanceOfSomeClass, instanceOfSomeOtherClass);

关于c# - 类型参数的约束,是否可以有可选类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com