小编Bry*_*ant的帖子

未看到C#扩展方法

我知道这是一个愚蠢的错误,但我无法弄清楚发生了什么.我已经创建了一些扩展方法,并尝试访问它们,但默认方法不断被调用:

namespace MyProject
{
    public static class Cleanup
    {

        public static string cleanAbbreviations(this String str) {
             if (str.Contains("JR"))
                 str = str.Replace("JR", "Junior");
             return str;
        }


        public static bool Contains(this String str, string toCheck)
        {//Ignore the case of our comparison
            return str.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
        }
        public static string Replace(this String str, string oldStr, string newStr)
        {//Ignore the case of what we are replacing
            return Regex.Replace(str, oldStr, newStr, RegexOptions.IgnoreCase);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

c# extension-methods

2
推荐指数
1
解决办法
174
查看次数

RegisterType与EventAggregator和ViewModel

我不明白我们如何注册一个IEventAggregator实例,所以我们可以将它注入一个实例ViewModel.

例:

我定义了我的MainViewModel:

...
private IEventAggregator _eventAggregator;

public MainViewModel(IEventAggregator eventAggregator) {
    _eventAggregator = eventAggregator;
    ...
}
...
Run Code Online (Sandbox Code Playgroud)

然后,我需要以某种方式注册一个实现IEventAggregator我想要注入的类ViewModel.

在我的ModuleInit班上,我会有这样的事情:

...
private IUnityContainer _container;

public ModuleInit(IUnityContainer _container) {
   _container = container;
}
...
public void Initialize() {
   container.RegisterType<IEventAggregator, ___(something)___>();
   ...
}
Run Code Online (Sandbox Code Playgroud)

在我的MainViewModel班上,我也可以实现_eventAggregator = ServiceLocator,Current.GetInstance<IEventAggregator>();,但我从概念上并不真正理解我在做什么.该计划正常运作......

我真的很想了解ServiceLocator实际上在做什么,以及我应该做些什么来适当地使用我的容器注册一个类型.我没有定义类的实现IEventAggregator,那么ServiceLocator获取实例的位置是什么?然后我必须注册什么才能当我解决某些问题时,就像我一样ViewModel,它会创建一个新EventAggregator实例?

c# wpf unity-container mvvm eventaggregator

2
推荐指数
1
解决办法
2999
查看次数

C#在Foreach循环中替换字符串

我正在尝试替换文字.我正在使用字典来完成任务.

public static string cleanString(this String str) {

    Dictionary<string, string> dict = new Dictionary<string,string>();
    dict.Add("JR", "Junior");
    dict.Add("SR", "Senior");

    foreach (KeyValuePair<string,string> d in dict) {
        if (str.BlindContains(p.Key)) {
            str = str.BlindReplace(str, p.Value);
        }
    }

    return str;
}
Run Code Online (Sandbox Code Playgroud)

BlindContains和BlindReplace只是忽略替换的情况(并且BC确保字符串不是另一个单词的一部分):

public static bool BlindContains(this String str, string toCheck)
{
    if (Regex.IsMatch(str, @"\b" + toCheck + @"\b", RegexOptions.IgnoreCase))
        return str.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
    return false;
}
public static string BlindReplace(this String str, string oldStr, string newStr)
{
    return Regex.Replace(str, oldStr, newStr, RegexOptions.IgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)

问题 …

c#

0
推荐指数
1
解决办法
670
查看次数