gpt4 book ai didi

c# 优先扩展方法(仅限)

转载 作者:行者123 更新时间:2023-11-30 20:38:37 27 4
gpt4 key购买 nike

让我从代码开始……请注意,这不是关于覆盖实例方法的问题——这纯粹涉及扩展方法。此代码用于 Unity3D 游戏引擎,版本 5.3.x

public static class ExtentionMethods {

public static string ToJson<T>(this List<T> list) {
string s = "[";
for (int i = 0; i < list.Count; i++) {
if (i > 0)
s += ",";
s += list[i].ToJson();
}
return s + "]";
}

public static string ToJson(this object o) {
if (o == null)
return "null";
return o.ToString();
}

public static string ToJson(this string value){
return "\"" + value + "\"";
}
}

public List<string> list = new List<string>();
void Start () {
list.Add ("dog0");
list.Add ("dog1");
list.Add ("dog2");
Debug.Log (list.ToJson());

string s = "elephants";
Debug.Log (s.ToJson());
}

输出如下:

[dog0,dog1,dog2]
"elephants"

似乎调用ToJson()函数的字符串可能使用对象或字符串类型。有没有办法让它只使用字符串版本的方法?

最佳答案

此时:

s += list[i].ToJson();

...编译器只知道 list[i] 是一个对象,所以这就是您获得的扩展方法。您必须查看 list[i] 的类型,如果它是字符串,则调用字符串重载,例如,

object o = list[i];
string s = o as string;
if (s != null)
{
s += s.ToJson();
}
else
{
s += o.ToJson();
}

扩展方法是很好的语法糖,但不要对通用魔法抱有太大期望。 :-)

关于c# 优先扩展方法(仅限),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35004824/

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