相关疑难解决方法(0)

在C#中是否有任何方法可以使用扩展方法覆盖类方法?

在某些情况下,我想要使用扩展方法覆盖类中的方法.有没有办法在C#中做到这一点?

例如:

public static class StringExtension
{
    public static int GetHashCode(this string inStr)
    {
        return MyHash(inStr);
    }
}
Run Code Online (Sandbox Code Playgroud)

在那里我一直想做到这一点的情况是能够将一个字符串的哈希存储到数据库中,并有相同的值由所有使用String类的哈希值(即词典等)由于类使用内置的.Net哈希算法不能保证从一个版本的Framework到下一个版本兼容,我想用我自己的版本替换它.

还有其他情况我遇到了我想用扩展方法覆盖类方法的地方,所以它不仅仅特定于字符串类或GetHashCode方法.

我知道我可以通过子类化现有的类来做到这一点但是在很多情况下能够使用扩展来做它会很方便.

c# extension-methods overriding

96
推荐指数
2
解决办法
3万
查看次数

如果扩展方法与密封类中的方法具有相同的签名,那么调用优先级是什么?

我正在阅读C#3.0中的扩展方法.我正在阅读的文本暗示,与正在扩展的类中的方法具有相同签名的扩展方法将按执行顺序排在第二位 - 也就是说,密封类中的方法被调用.如果是这种情况,你怎么能延长密封班?

c# extension-methods c#-3.0

14
推荐指数
2
解决办法
3192
查看次数

覆盖.ToString()

我想覆盖.ToString()函数,这样每当我得到一个double时,它只输出小数点后的5位数.

如何在覆盖函数内部对.ToString正在处理的对象进行处理?换句话说,我在下面的代码中放了什么shell而不是XXX?

public override string ToString()
{
    if (XXX.GetType().Name == "Double")
        return (Math.Round(XXX, 5));
}
Run Code Online (Sandbox Code Playgroud)

c# overriding

4
推荐指数
3
解决办法
6764
查看次数

有没有办法为不同命名空间中的同名扩展方法指定使用哪个扩展方法?

使用以下代码片段的简单示例:

using System.Data;
using CustomerNameSpace;
...
...
CDataSet.CustomerDataTable dtCustomer = GetCustomer();

var customersWithName = dtCustomer.AsEnumerable()
    .Where(x => x.Name != null)
    .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我的同事CopyToDataTable()CustomerNameSpace.

本例中的程序同时使用命名空间System.DataCustomerNameSpace.

现在两者都包含扩展方法CopyToDataTable()

在下面的示例片段中,有没有办法指定要使用这两个命名空间中的哪些扩展方法?

c# linq extension-methods

3
推荐指数
1
解决办法
91
查看次数

标签 统计

c# ×4

extension-methods ×3

overriding ×2

c#-3.0 ×1

linq ×1