小编ben*_*iii的帖子

C#将通用参数转换为接口

我需要帮助将通用的paremetrs转换为接口.

我有这样的预烘焙代码:

public interface InterFoo<T> {...}
public InterFoo<T> specialFoo<T>() where T : InterFoo<T> {...}
public InterFoo<T> regularFoo<T>() {...}
Run Code Online (Sandbox Code Playgroud)

我想实现这样的东西

public InterFoo<T> adaptiveFoo<T>()
{
    if (T is InterFoo<T>)
        return specialFoo<T as InterFoo>();
    return regularFoo<T>();
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,我无法找到任何解决方案,所以任何事情都会有所帮助,谢谢.

编辑:最初函数返回了一个int但是有一个更简单的解决方案与代码的预期目的不兼容,函数已被更改为请求泛型类型.

c# generics types casting generic-constraints

4
推荐指数
1
解决办法
128
查看次数

Richtextbox.Document 属性未定义

徒劳地尝试在 Windows 窗体中显示格式化文本和链接,我尝试使用 RichTextBox 并将格式化文本插入其中MyRTB.Document;(我正在使用MSDN 中的RichTextBox 概述)但是,当我尝试使用该项目时,我发现没有为 RichTextBox 定义 Document 属性。我已经添加了presentationframework.dll 程序集并添加using System.Windows.Controls属性文档中所述的内容,但仍然没有骰子。我不知道为什么会发生这种情况或如何使其发挥作用,任何帮助都会得到帮助。

c# xaml rtf richtextbox visual-studio-2010

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

C#:IEnumerable <T>.在某些情况下,选择()效率低下?

我最近了解到.NET的LINQ实现创建的对象对于特定的枚举类型效率低下.

看看这段代码:

public class DummyCollection : ICollection<int>
{
        public IEnumerator<int> GetEnumerator()
        {
            throw new Exception();
        }
        public int Count
        {
            get
            {
                return 10;
            }
        }
    //some more interface methods
}
Run Code Online (Sandbox Code Playgroud)

基本上,DummyCollection的实例大小为10,但如果实际枚举则抛出异常.

现在这里:

var d = new DummyCollection();
Console.WriteLine(d.Count());
Run Code Online (Sandbox Code Playgroud)

打印10没有错误,但这段代码:

var l = d.Select(a=> a);
Console.WriteLine(l.Count());
Run Code Online (Sandbox Code Playgroud)

抛出异常,尽管说我的尺寸也是10也是微不足道的(因为Select提供了1对1的映射).这基本上意味着,当检查Ienumerable的长度时,输入可能是Select-wrapped Collection,从而将计算时间从O(1)扩展到惊人的O(n)(可能更糟,如果选择功能特别麻烦).

我知道当你要求LINQ的泛型时你会牺牲效率,但这似乎是一个很难解决的问题.我在网上查了一下,找不到任何人解决这个问题.有没有办法绕过这个缺点?有人在调查这个吗?有人修这个吗?这只是一个边缘案例,这不是一个问题吗?任何见解都表示赞赏.

c# linq

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