通用方法 - 无法隐式转换类型'字符串'给T [英] Generic Method - Cannot implicitly convert type 'string' to T

查看:216
本文介绍了通用方法 - 无法隐式转换类型'字符串'给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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆