小编Ste*_*ger的帖子

C#方法重载和通用接口

我对项目中遇到的问题感到困惑.我试图简化它以重现效果:

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) …

c# generics overloading

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

用NHibernate查询

我是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)

nhibernate hql nhibernate-criteria

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

C#:应该如何实现ToString()?

问题是:

  • GUI库喜欢ToString用作类的默认表示.它需要本地化.
  • ToString用于记录.它应该提供与编程相关的信息,不翻译并包括内部状态,如代理键和枚举值.
  • ToString许多字符串操作使用它们将对象作为参数,例如String.Format,在写入流时.根据您认为不同的上下文.
  • ToString如果同一对象有许多不同的表示,则太有限了,例如.长短形式.

由于使用的不同,有许多不同的实现方式.所以它们太不可靠而不是真正有用.

如何ToString实施才有用?什么时候应该ToString使用,什么时候应该避免?


.NET Framework文档说:

此方法返回对文化敏感的人类可读字符串.

有一个类似的问题,但不一样.

c# tostring

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

调用Dispose()后,为什么IsDisposed返回false?

我试图清除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)

c# dispose winforms

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

关于"成员"的C#扩展方法

我有一些扩展方法,可以像这样使用:

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()似乎有误导性.我这里不讨论静态属性.我知道这种语法是不可能的.我只是试图用伪语言表示,需要哪些信息.这将是理想的,每一个额外的东西只是语法开销.任何与此接近的工作语法都会很棒.

我不想写一定的扩展方法.我想要一个简单,可读和编译时安全的语法,使用任何语言功能.

c# lambda extension-methods

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

C# - 使字段/属性有条件地读取

我有三节课; 类AB两个引用类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改变属性.

我确信这是基本的东西,但找不到简单的答案.

谢谢

c# readonly immutability

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

工厂方法何时比简单工厂好,反之亦然?

通过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()方法或进程的任何其他部分.并且没有任何关于使用工厂方法如果有任何问题会有所帮助.

所以在我看来,首先暗示在一家简单工厂使用工厂方法的原因是假的.

oop design-patterns

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

如何在命令行中使用MS代码覆盖工具?

我有以下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中打开覆盖文件时,我的结果没有任何结果.

在此输入图像描述

可能有什么问题?我按照这篇文章中的说明进行操作.

c++ profiling code-coverage visual-studio-2010

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

Hibernate - 超越对象/关系映射?

http://www.hibernate.org/它有这个介绍文本:

从历史上看,Hibernate通过对象/关系映射促进了Java域对象的存储和检索.今天,Hibernate是一个相关项目的集合,使开发人员能够在其应用程序中以远远超出对象/关系映射的方式利用POJO样式的域模型.

换句话说:最初它是关于ORM的,现在它不仅仅是ORM.

在线之间阅读:ORM并不是城里唯一的游戏 - 有更新的方式来处理这些可能更好的事情.

当我进入文档时,它仍然只是将其描述为ORM库.是否有任何好的博客文章概述了已经采取的任何新的"后ORM"方法,以及这些功能如何工作和打算使用(以及它们如何/为什么可能比"传统"ORM更好)?

orm hibernate

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

在Windows 7中调用Process32First时出现ERROR_BAD_LENGTH

我只是试图撤销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"我无法弄清楚问题是什么.有什么建议?

c++ windows-7

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