我有一个泛型类,我正在尝试实现隐式类型转换.虽然它主要起作用,但它不适用于界面转换.经过进一步调查,我发现存在编译器错误:"来自接口的用户定义转换"适用.虽然我知道在某些情况下应该强制执行,但我正在尝试做的事情似乎是合法的案例.
这是一个例子:
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
我在文本框中输入一个字符串值,显示需要格式化的余额,如下所示:
###,###,###,##0.00
Run Code Online (Sandbox Code Playgroud)
我可以使用value.ToString("c"),但这会将货币符号放在它前面.
知道如何在输入文本框之前操作字符串以实现上述格式化吗?
我试过这个,没有成功:
String.Format("###,###,###,##0.00", currentBalance);
Run Code Online (Sandbox Code Playgroud)
非常感谢,
我在尝试绘制多对多关系时遇到了问题,其中关系的两侧都引用了同一个实体.我正在使用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
我相信必须有一个更好的方法来做到这一点.我正在尝试对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)
我确信必须有更好的方法来做到这一点,但必须患有精神障碍.谁能建议更好的解决方案?
我正试图让我的头脑绕过一些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
您使用哪种命名约定?为什么?
我喜欢使用employeeNameTextBox,因为:
注意:我使用的是全名而不是缩写(例如"tb"),因为它符合MS的命名约定,即避免使用缩写.
我正在制作一些永远在顶的吐司作为形式,当我打开它们时,我希望它们在打开时不要从其他形式中夺走焦点.我怎样才能做到这一点?
谢谢
我有一个非常简单的ASP.Net MVC应用程序,我是通过在线教程生成的.我已经完全按照它一步一步地尝试了多次,但在执行代码时仍然遇到同样的错误.
该程序只显示一个索引页面,该页面列出了使用linq到sql的sql server数据库中的一系列数据.
这是错误:
无法加载类型'MvcApplication1.Views.Home.Index'.
任何想法可能是什么问题?
我正在尝试开发一个NUnit插件,它可以从包含Action
委托列表的对象动态地将测试方法添加到套件中.问题在于NUnit似乎非常倾向于反思以完成工作.因此,看起来没有简单的方法可以将我的Action
s直接添加到套件中.
相反,我必须添加MethodInfo
对象.这通常有效,但Action
代表是匿名的,所以我必须构建完成此任务的类型和方法.我需要找到一种更简单的方法来做到这一点,而无需使用Emit
.有谁知道如何从Action代理轻松创建MethodInfo实例?
这个陈述在C#中意味着什么?
using (object obj = new object())
{
//random stuff
}
Run Code Online (Sandbox Code Playgroud) c# ×8
winforms ×3
.net ×2
asp.net ×1
asp.net-mvc ×1
casting ×1
currency ×1
enums ×1
focus ×1
format ×1
forms ×1
generics ×1
many-to-many ×1
mvp ×1
nhibernate ×1
nunit-addins ×1
reflection ×1
string ×1
wpf ×1