gpt4 book ai didi

c# - 我能否根据用于该类的泛型类型是值类型还是引用类型,从泛型类中的函数返回不同的类型?

转载 作者:行者123 更新时间:2023-11-30 14:44:54 24 4
gpt4 key购买 nike

我想返回一个 Nullable<Value>如果 Value 是值类型,则来自泛型类中的函数;如果值已经是引用类型,则只是“Value”。

我一直在尝试使用 where 子句来实现这一点,但我似乎无法在非泛型函数上使用 where 类,即使是在泛型类中也是如此。

    public class HashTable<Key, Value>
{
private List<ValueSlot> valueSlots = new List<ValueSlot>();

private struct ValueSlot
{
public bool hasValue;
public List<KeyValuePair<Key, Value>> values;
}

//...

public Nullable<Value> TryGetValue(Key key) where Value : struct
{
(bool result, Value value) = TryGetValue(valueSlots, key);

if (result == true)
{
Nullable<Value> myVal = value;
return myVal;
}
else
{
return null;
}
}

public Value TryGetValue(Key key) where Value : class
{
(bool result, Value value) = TryGetValue(valueSlots, key);

return result == true ? value : (Value)null;
}

private (bool, Value) TryGetValue(List<ValueSlot> valueSlots, Key key)
{
//...
}

//...
}

不幸的是,这不会编译并生成一堆错误。我宁愿不求助于从类里面返回元组。有没有一种简单的方法可以使我缺少的这种方法起作用?近一个星期以来,我一直在努力让它发挥作用......

最佳答案

C# 尚不支持返回类型的多态性。通用类型约束是对编译器的提示,不会使方法签名不同。

关于c# - 我能否根据用于该类的泛型类型是值类型还是引用类型,从泛型类中的函数返回不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56750776/

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