通用方法 - 无法隐式转换类型'字符串'给T [英] Generic Method - Cannot implicitly convert type 'string' to T
本文介绍了通用方法 - 无法隐式转换类型'字符串'给T的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可能是一个简单的问题。
我有一个接口:
公共接口ISanitizer
{$ b $(b T)消毒< T>(T data_中的数据);
}
和实现类:
公共类BasicFilenameSanitizer:ISanitizer
{
私人只读字符串m_replacementCharacter =的String.Empty;
公共BasicFilenameSanitizer(字符串replacementCharacter_)
{
如果(replacementCharacter_ == NULL)
{
抛出新的ArgumentNullException(replacementCharacter_);
}
m_replacementCharacter = replacementCharacter_;
}
公众实际的t消毒< T>(T filename_)
{
如果(filename_ == NULL)
{
抛出新的ArgumentNullException(filename_);
}
正则表达式invalidCharacterRegex =
新正则表达式(的String.Format([{0}],Regex.Escape(新的字符串(System.IO.Path.GetInvalidFileNameChars( ))))); $ B发生在这里
$ B //错误
返回Regex.Replace(filename_.ToString(),invalidCharacterRegex.ToString(),m_replacementCharacter);
}
}
解决方案
在你的代码在返回字符串
从一个普通的类型,它可能是的任何的
你的代码改成这样,如果你想有一个的通用的返回类型:
公开接口ISanitizer< T>
{$ B $(B T)消毒(T data_中的数据);
}
公共类BasicFilenameSanitizer:ISanitizer<串GT;
如果您只是想总是返回字符串
你只需要改变方法的返回类型:
公共接口ISanitizer
{
串消毒< T>(T data_中的数据);
}
公共虚拟字符串消毒< T>(T filename_)
May be a simple question..
I have an interface:
public interface ISanitizer
{
T Sanitize<T>(T data_);
}
And an implementing class:
public class BasicFilenameSanitizer : ISanitizer
{
private readonly String m_replacementCharacter = String.Empty;
public BasicFilenameSanitizer(String replacementCharacter_)
{
if (replacementCharacter_ == null)
{
throw new ArgumentNullException("replacementCharacter_");
}
m_replacementCharacter = replacementCharacter_;
}
public virtual T Sanitize<T>(T filename_)
{
if (filename_ == null)
{
throw new ArgumentNullException("filename_");
}
Regex invalidCharacterRegex =
new Regex(String.Format("[{0}]", Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()))));
//error occurs here
return Regex.Replace(filename_.ToString(), invalidCharacterRegex.ToString(), m_replacementCharacter);
}
}
解决方案
In your code you are returning a string
from a generic type which could be anything.
Change your code to this if you want a generic return type:
public interface ISanitizer<T>
{
T Sanitize(T data_);
}
public class BasicFilenameSanitizer : ISanitizer<string>
If you simply want to always return a string
you only need to change the method return type:
public interface ISanitizer
{
string Sanitize<T>(T data_);
}
public virtual string Sanitize<T>(T filename_)
这篇关于通用方法 - 无法隐式转换类型'字符串'给T的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文