小编Mic*_*ows的帖子

隐式运算符使用接口

我有一个泛型类,我正在尝试实现隐式类型转换.虽然它主要起作用,但它不适用于界面转换.经过进一步调查,我发现存在编译器错误:"来自接口的用户定义转换"适用.虽然我知道在某些情况下应该强制执行,但我正在尝试做的事情似乎是合法的案例.

这是一个例子:

public class Foo<T> where T : IBar
{
    private readonly T instance;

    public Foo(T instance)
    {
        this.instance = instance;
    }
    public T Instance
    {
        get { return instance; }
    }
    public static implicit operator Foo<T>(T instance)
    {
        return new Foo<T>(instance);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用它的代码:

var concreteReferenceToBar = new ConcreteBar();
IBar intefaceReferenceToBar = concreteReferenceToBar;
Foo<ConcreteBar> concreteFooFromConcreteBar = concreteReferenceToBar;
Foo<IBar> fooFromConcreteBar = concreteReferenceToBar;
Foo<IBar> fooFromInterfaceBar = intefaceReferenceToBar; // doesn't work
Run Code Online (Sandbox Code Playgroud)

有没有人知道一个解决方法,或者任何人都能以令人满意的方式解释为什么我不能施展 interfaceReferenceToBar隐式地Foo<IBar>,因为在我的情况下它没有被转换,只包含在Foo中?

编辑: 看起来协方差可能提供救赎.我们希望C#4.0规范允许使用协方差隐式转换接口类型.

c# compiler-construction generics casting implicit-conversion

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

格式化双倍值,如货币,但没有货币符号(C#)

我在文本框中输入一个字符串值,显示需要格式化的余额,如下所示:

###,###,###,##0.00
Run Code Online (Sandbox Code Playgroud)

我可以使用value.ToString("c"),但这会将货币符号放在它前面.

知道如何在输入文本框之前操作字符串以实现上述格式化吗?

我试过这个,没有成功:

String.Format("###,###,###,##0.00", currentBalance);
Run Code Online (Sandbox Code Playgroud)

非常感谢,

c# string format currency

50
推荐指数
4
解决办法
7万
查看次数

流畅的nhibernate - 在同一实体上的多对多关系映射

我在尝试绘制多对多关系时遇到了问题,其中关系的两侧都引用了同一个实体.我正在使用Fluent NHibernate和NH3.1.

基本上,情况是这样的 - 我有一个类别,可以有多个父母.因此,一个类别有多个其他类别作为父类,以及多个其他类别作为其子类.

HasManyToMany(x => x.ParentCategories).AsBag().Table("parentcategorychildren").ParentKeyColumn("ChildID").ChildKeyColumn("ParentID").Cascade.SaveUpdate();
HasManyToMany(x => x.ChildrenCategories).AsBag().Table("parentcategorychildren").ParentKeyColumn("ParentID").ChildKeyColumn("ChildID").Inverse();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建工厂时,我收到以下错误:

Category.ChildrenCategories与Category.ChildrenCategories的关系在双方都指定了Inverse.从关系的一侧移除反向.

我发现奇怪的是为什么它将Category.ChildrenCategories提到Category.ChildrenCategories,而不是ParentCategories?

任何帮助将不胜感激 !

我刚刚为此创造了一笔赏金,因为这对我来说非常重要.拜托,我对"你不能这样做"作为答案不感兴趣.

c# nhibernate entity-relationship many-to-many fluent-nhibernate

20
推荐指数
2
解决办法
4168
查看次数

计算枚举上设置的标志数

我相信必须有一个更好的方法来做到这一点.我正在尝试对Flags枚举进行计数操作.在我尝试所有可能的值并计算成功的AND操作之前.

例如

[Flags]
public enum Skills
{
    None = 0,
    Skill1 = 1,
    Skill2 = 2,
    Skill3 = 4,
    Skill4 = 8,
    Skill5 = 16,
    Skill6 = 32,
    Skill7 = 64,
    Skill8 = 128
}

public static int Count(Skills skillsToCount)
{
   Skills skill;
   for (int i = 0; i < SkillSet.AllSkills.Count; i++)
   {
      skill = SkillSet.AllSkills[i];
      if ((skillsToCount & skill) == skill && skill != Skills.None)
         count++;
   }
   return count;
}
Run Code Online (Sandbox Code Playgroud)

我确信必须有更好的方法来做到这一点,但必须患有精神障碍.谁能建议更好的解决方案?

c# enums

19
推荐指数
4
解决办法
7850
查看次数

MVP和UserControls和调用

我正试图让我的头脑绕过一些MVP stuf,因为它与用户控件有关.我正在使用.NET WinForms(或接近它的东西)和监督控制器模式(好吧,我想我:).

用户控件本身是MVP应用程序的一部分(它的View和一个关联的Presenter等).Presenter始终首先启动,然后启动模型,然后启动View(s).View构建其UI,其中一部分将是新的UC,即View.

现在(表单)Presenter需要了解UC Presenter,但我认为它对View的组成方式一无所知.例如,Presenter表格不知道UC是表单控件集合的一部分,也不应该.

此外,不应改变设计经验; Iow视图(表单)的开发应该只能从工具箱中选择一个用户控件并将其放在表单上.

那么,关于我的问题.首先,我的假设是否正确?有点误导?弄乱?WTF你在想什么?

其次,是否正确(足够?)使表单View调用UC视图,表单Presenter调用UC Presenter并有一些机制告诉UC查看它的Presenter是什么?这打破了我的"Presenter first"规则,但我不确定如何做到这一点.

很高兴接受任何其他想法,建议和评论.

- nwahmaet

mvp user-interface design-patterns winforms

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

textBoxEmployeeName与employeeNameTextBox

您使用哪种命名约定?为什么?

我喜欢使用employeeNameTextBox,因为:

  • 从英语角度来看,这似乎更自然.
  • 我发现用Intellisense查找更容易.
  • 该约定类似于用于事件(MouseClickEvent,MouseClickEventHandler)和依赖项属性(VisiblityProperty)的约定.

注意:我使用的是全名而不是缩写(例如"tb"),因为它符合MS的命名约定,即避免使用缩写.

http://msdn.microsoft.com/en-us/library/ms229045.aspx

wpf naming-conventions hungarian-notation winforms

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

在C#中打开一个没有焦点的表单

我正在制作一些永远在顶的吐司作为形式,当我打开它们时,我希望它们在打开时不要从其他形式中夺走焦点.我怎样才能做到这一点?

谢谢

c# forms focus winforms

10
推荐指数
2
解决办法
6788
查看次数

执行时ASP.Net MVC"无法加载类型"

我有一个非常简单的ASP.Net MVC应用程序,我是通过在线教程生成的.我已经完全按照它一步一步地尝试了多次,但在执行代码时仍然遇到同样的错误.

该程序只显示一个索引页面,该页面列出了使用linq到sql的sql server数据库中的一系列数据.

这是错误:

无法加载类型'MvcApplication1.Views.Home.Index'.

任何想法可能是什么问题?

c# asp.net asp.net-mvc

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

如何从Action委托创建MethodInfo

我正在尝试开发一个NUnit插件,它可以从包含Action委托列表的对象动态地将测试方法添加到套件中.问题在于NUnit似乎非常倾向于反思以完成工作.因此,看起来没有简单的方法可以将我的Actions直接添加到套件中.

相反,我必须添加MethodInfo对象.这通常有效,但Action代表是匿名的,所以我必须构建完成此任务的类型和方法.我需要找到一种更简单的方法来做到这一点,而无需使用Emit.有谁知道如何从Action代理轻松创建MethodInfo实例?

.net c# reflection nunit-addins

10
推荐指数
2
解决办法
6632
查看次数

使用(object obj = new Object())是什么意思?

这个陈述在C#中意味着什么?

        using (object obj = new object())
        {
            //random stuff
        }
Run Code Online (Sandbox Code Playgroud)

.net c# using-statement

7
推荐指数
2
解决办法
2813
查看次数