我有两种扩展方法:
public static string ToString(this List<object> list, char delimiter)
{
return ToString<object>(list, delimiter.ToString());
}
public static string ToString(this List<object> list, string delimiter)
{
return ToString<object>(list, delimiter);
}
当我使用它时:
char delimiter = ' ';
return tokens.ToString(delimiter);
它无效。 char重载也不会出现在代码完成列表中。谁能告诉我如何使这项工作?
修改
我偶然忘记提到实际上有3种扩展方法,第三种是:
public static string ToString<T>(this List<T> list, string delimiter)
{
if (list.Count > 0)
{
string s = list[0].ToString();
for (int i = 1; i < list.Count; i++)
s += delimiter + list[i].ToString();
return s;
}
return "";
}
答案 0 :(得分:8)
添加对具有扩展方法的类的引用:
using MyApplicationNamespace.ToStringExtensionClass;
VS / ReSharper不提供自动添加引用,因为该方法已被识别,而不是使用该特定签名。
此外,除非您有第三个带泛型参数的扩展方法,否则您的方法本身不会编译。
他们为我工作的方式(编译和逻辑):
public static string ToString(this List<object> list, char delimiter)
{
return ToString(list, delimiter.ToString());
}
public static string ToString(this List<object> list, string delimiter)
{
return string.Join(delimiter, list);
}
用法将是:
var list = new List<int> { 1, 2, 3, 4, 5 };
var str = list.Cast<object>().ToList().ToString(' ');
如果您想避免强制转换并使方法具有通用性,请将它们更改为:
public static string ToString<T>(this List<T> list, char delimiter)
{
return ToString(list, delimiter.ToString());
}
public static string ToString<T>(this List<T> list, string delimiter)
{
return string.Join(delimiter, list);
}
然后使用更清洁:
var list = new List<int> { 1, 2, 3, 4, 5 };
var str = list.ToString(' ');
修改强>
因此,在您编辑后,我更了解您的问题。 您应该丢失非泛型方法并使用泛型重载来接受char。
public static string ToString<T>(this List<T> list, char delimiter)
{
return ToString(list, delimiter.ToString());
}
public static string ToString<T>(this List<T> list, string delimiter)
{
...
}
此外,您尝试实施的逻辑可以通过以下方式轻松实现:
string.Join(delimiter, list);
所以你基本上可以删除所有这些方法并使用它,除非你真的希望它作为列表的扩展方法。
答案 1 :(得分:1)
我认为您的问题是您正在为通用List指定对象类型,而不是将其作为通用方法。
在定义如下内容时查看是否有效:
public static string ToString<T>(this List<T> list, char delimiter)
{
return ToString<T>(list, delimiter.ToString());
}
public static string ToString<T>(this List<T> list, string delimiter)
{
return String.join(list, delimiter);
}
您使用字符串分隔符的原始函数只是调用自身,因此您必须更改ToString<T>(this List<T> list, string delimiter)
以执行一些有用的操作,如String.join