我对项目中遇到的问题感到困惑.我试图简化它以重现效果:
interface IBar { }
class Bar : IBar {}
interface IFoo<T> where T : IBar { }
class Foo<T> : IFoo<T> where T : IBar { }
class Class1
{
public void DoTheFoo<T>(T bar) where T : IBar
{}
public void DoTheFoo<T>(IFoo<T> foo) where T : IBar
{}
public void Test()
{
var bar = new Bar();
var foo = new Foo<Bar>();
DoTheFoo(bar); // works
DoTheFoo<Bar>(foo); // works
DoTheFoo((IFoo<Bar>)foo); // works
DoTheFoo(foo); // complains
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说这看起来很好,但编译器在最后一次调用时抱怨,因为它试图DoTheFoo<T>(T bar) …
我是NHibernate的新手,我正在尝试学习如何查询我的数据.
下面是配置xml.仅显示配方.
我希望能够通过来自输入的关键字的recipetitle以及来自ingredientname的成分来查询食谱.
所以你可以输入"面食酒".
这是我尝试过但却给我一个错误.
hql = "from Recipe r " +
"left join r.Images " +
"inner join r.User " +
"inner join r.Ingredients i " +
"where i.IngredientName Like '%pasta%' OR i.IngredientName Like '%wine%' OR r.RecipeTitle Like '%pasta' OR r.RecipeTitle Like '%wine%'";
Run Code Online (Sandbox Code Playgroud)
我也想加载收藏品.
我要去查询吗?我需要能够根据我的搜索条件构建查询字符串.这在SQL中很容易形成.
马尔科姆
<class name="Recipe" table="Recipes" xmlns="urn:nhibernate-mapping-2.2">
<id name="RecipeID" type="Int32" column="RecipeID">
<generator class="identity" />
</id>
<property name="RecipeTitle" type="String">
<column name="RecipeTitle" />
</property>
<property name="Completed" type="Boolean">
<column name="Completed" />
</property>
<property name="ModifiedOn" type="DateTime">
<column name="ModifiedOn" />
</property> …Run Code Online (Sandbox Code Playgroud) 问题是:
ToString用作类的默认表示.它需要本地化.ToString用于记录.它应该提供与编程相关的信息,不翻译并包括内部状态,如代理键和枚举值.ToString许多字符串操作使用它们将对象作为参数,例如String.Format,在写入流时.根据您认为不同的上下文.ToString如果同一对象有许多不同的表示,则太有限了,例如.长短形式.由于使用的不同,有许多不同的实现方式.所以它们太不可靠而不是真正有用.
如何ToString实施才有用?什么时候应该ToString使用,什么时候应该避免?
此方法返回对文化敏感的人类可读字符串.
有一个类似的问题,但不一样.
我试图清除ToolStripDropDownButton中的所有项目.由于它们是一次性的,我在每个上面都使用dispose方法.但是我看到在调用dispose()方法之后,IsDisposed属性仍然返回false.为什么这样,我如何检查是否在任何对象上调用Dispose()?在我目前的项目中,这不是一个问题(我希望),但我真的想知道这里发生了什么......
我的代码到目前为止:
private void ClearDropDownAccessConnections()
{
ToolStripItem button = null;
for (int i = toolStripDropDownButtonAccess.DropDownItems.Count - 1; i > 0; i--)
{
button = toolStripDropDownButtonAccess.DropDownItems[i] as ToolStripItem;
if ((button.Tag != null) && ((int)button.Tag == 10))
{
toolStripDropDownButtonAccess.DropDownItems.Remove(button);
button.Dispose();
//IF I CHECk HERE THEN button.IsDisposed IS STILL FALSE }
}
}
Run Code Online (Sandbox Code Playgroud) 我有一些扩展方法,可以像这样使用:
MyType myObject;
string displayName = myObject.GetDisplayName(x => x.Property);
Run Code Online (Sandbox Code Playgroud)
这里的问题是它需要一个实例,即使扩展方法只需要类型MyType.因此,如果没有实例,则需要像这样调用:
string displayName = BlahBlahUtility.GetDisplayName((MyTpe x) => x.Property);
Run Code Online (Sandbox Code Playgroud)
哪个不再那么好了.
有没有办法为这种情况编写更好的语法?
我真正想做的是这(伪语言):
string displayName = MyType.Property.GetDisplayName()
Run Code Online (Sandbox Code Playgroud)
这当然不适用于C#.
但是这样的事情呢:
string displayName = ((MyType x) => x.Property).GetDisplayName();
Run Code Online (Sandbox Code Playgroud)
这也是不可能的(在lambda之后,不接受点).
有任何想法吗?
编辑:
我的"最喜欢的语法" MyType.Property.GetDisplayName()似乎有误导性.我这里不讨论静态属性.我知道这种语法是不可能的.我只是试图用伪语言表示,需要哪些信息.这将是理想的,每一个额外的东西只是语法开销.任何与此接近的工作语法都会很棒.
我不想写一定的扩展方法.我想要一个简单,可读和编译时安全的语法,使用任何语言功能.
我有三节课; 类A和B两个引用类C.
我如何才能这样做,以便C在从类引用时可以修改类的成员,A但在从类引用时不进行修改B?
IE,以下应该是可能的;
classA myClassA = new classA();
myClassA.myClassC.IssueNumber = 3;
Run Code Online (Sandbox Code Playgroud)
但这不应该是可能的;
classB myClassB = new classB();
myClassB.myClassC.IssueNumber = 3;
Run Code Online (Sandbox Code Playgroud)
使classB.classC只读仍然允许classC改变属性.
我确信这是基本的东西,但找不到简单的答案.
谢谢
通过Head First Design Patterns一书的工作方式.
我相信我理解简单的工厂和工厂方法,但我很难看到工厂方法带来的简单工厂优势.
如果对象A使用简单工厂来创建其B对象,则客户端可以像这样创建它:
A a = new A(new BFactory());
Run Code Online (Sandbox Code Playgroud)
而如果一个对象使用工厂方法,客户端可以像这样创建它:
A a = new ConcreteA(); // ConcreteA contains a method for instantiating
// the same Bs that the BFactory above creates, with
// the method hardwired into the subclass of A, ConcreteA.
Run Code Online (Sandbox Code Playgroud)
因此,在简单工厂的情况下,客户端使用B工厂组成A,而使用工厂方法,客户端为其想要的B类型选择适当的子类.
他们之间似乎没有多少选择.要么你必须选择你想要用哪个BFactory,要么你必须选择A的正确子类来给你Bs.
在什么情况下哪一个比另一个好?
谢谢大家!
编辑:添加一点混乱IMO是Head First叙述中给出的解释,他们从简单的工厂转换到工厂方法,说(第119页)"特许经营权正在使用你的[简单]工厂创造比萨饼,但开始在剩下的过程中采用他们自己的本土程序:他们将事情稍微区别开来......"他们有一张厨师的照片,他显然做了一些令人厌恶的比萨饼.
但是没有什么可以使用一个简单的工厂来让客户访问bake()方法或进程的任何其他部分.并且没有任何关于使用工厂方法如果有任何问题会有所帮助.
所以在我看来,首先暗示在一家简单工厂使用工厂方法的原因是假的.
我有以下C++代码.
#include <iostream>
using namespace std;
int testfunction(int input)
{
if (input > 0) {
return 1;
}
else {
return 0;
}
}
int main()
{
testfunction(-1);
testfunction(1);
}
Run Code Online (Sandbox Code Playgroud)
我编译它来获得执行
cl /Zi hello.cpp -link /Profile
Run Code Online (Sandbox Code Playgroud)
然后,我检测执行并生成.coverage二进制文件.
vsinstr -coverage hello.exe
start vsperfmon -coverage -output:mytestrun.coverage
vsperfcmd -shutdown
Run Code Online (Sandbox Code Playgroud)
当我在VS2010中打开覆盖文件时,我的结果没有任何结果.

可能有什么问题?我按照这篇文章中的说明进行操作.
看http://www.hibernate.org/它有这个介绍文本:
从历史上看,Hibernate通过对象/关系映射促进了Java域对象的存储和检索.今天,Hibernate是一个相关项目的集合,使开发人员能够在其应用程序中以远远超出对象/关系映射的方式利用POJO样式的域模型.
换句话说:最初它是关于ORM的,现在它不仅仅是ORM.
在线之间阅读:ORM并不是城里唯一的游戏 - 有更新的方式来处理这些可能更好的事情.
当我进入文档时,它仍然只是将其描述为ORM库.是否有任何好的博客文章概述了已经采取的任何新的"后ORM"方法,以及这些功能如何工作和打算使用(以及它们如何/为什么可能比"传统"ORM更好)?
我只是试图撤销Windows XP中的一些旧代码,它生成所有正在运行的进程的列表,但它在Windows 7上失败.在继续之前,这是代码:
#include <windows.h>
#include <tlhelp32.h>
int main()
{
HANDLE hSnap, hTemp;
PROCESSENTRY32 pe;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(Process32First(hSnap, &pe)) {
do {
...
}
} while(Process32Next(hSnap, &pe));
}
...
}
Run Code Online (Sandbox Code Playgroud)
我检查了哪个功能失败,结果发现它是Process32First.GetLastError()返回24:"ERROR_BAD_LENGTH"我无法弄清楚问题是什么.有什么建议?