gpt4 book ai didi

c# - C# 中 java.lang.Number 的等价物

转载 作者:行者123 更新时间:2023-11-30 22:56:22 25 4
gpt4 key购买 nike

我想在以数字为值的字典之间进行算术运算。这是我的代码:

public class DictionaryOperation {

public static Dictionary<TKey, double> Add<TKey>(Dictionary<TKey, double> d1, Dictionary<TKey, double> d2) {
Dictionary<TKey, double> result = new Dictionary<TKey, double>();
foreach (TKey key in d1.Keys) {
if (d2.ContainsKey(key))
result[key] = d1[key] + d2[key];
else
result[key] = d1[key];
}
foreach (TKey key in d2.Keys) {
if (!result.ContainsKey(key))
result[key] = d2[key];
}
return result;
}
}

我想知道我是否只能为任何数字类型(int float、decimal 等)创建一个方法,或者我是否必须为每个数字类型创建一个方法,这意味着将有相同的代码每种方法。

我希望能够做到这一点:

Dictionary<string, int> ints = DictionaryOperation.Add(new Dictionary<string, int>(), new Dictionary<string, int>());
Dictionary<string, float> floats = DictionaryOperation.Add(new Dictionary<string, float>(), new Dictionary<string, float>());

最佳答案

通过使用泛型,您可以避免为每个数字类型编写相同的方法。您的字典中已有一个通用键。唯一缺少的是通用值。更改您的方法以使用通用字典值:

public static Dictionary<TKey, TValue> Add<TKey, TValue>(Dictionary<TKey, TValue> d1, Dictionary<TKey, TValue> d2) 
where TValue : IComparable

问题是,没有只允许数字(或可以用 + 运算符添加的对象)的类型约束。我在上面的行中使用了 IComparable,因为所有数字类型都是可比较的。

下一个问题是,IComparable 在尝试使用 + 运算符时没有帮助。为此,您可以像这样使用动态:

dynamic a = d1[key];
dynamic b = d2[key];
result[key] = a + b;

现在您可以将该方法用于所有实现 IComparable 的类型。但是你没有编译时安全。这意味着您将收到所有未实现 + 运算符的类型的运行时错误。

这里已经描述了这个问题: C# Adding two Generic Values

这里是完整的方法:

public static Dictionary<TKey, TValue> Add<TKey, TValue>(Dictionary<TKey, TValue> d1, Dictionary<TKey, TValue> d2) 
where TValue : IComparable
{
Dictionary<TKey, TValue> result = new Dictionary<TKey, TValue>();
foreach (TKey key in d1.Keys) {
if (d2.ContainsKey(key))
{
dynamic a = d1[key];
dynamic b = d2[key];
result[key] = a + b;
}
else
result[key] = d1[key];
}
foreach (TKey key in d2.Keys) {
if (!result.ContainsKey(key))
result[key] = d2[key];
}
return result;
}

关于c# - C# 中 java.lang.Number 的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504397/

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