小编Inn*_*nno的帖子

为什么Count不是无符号整数?

可能重复:
为什么.NET在某些类中使用int而不是uint?
为什么Array.Length是int,而不是uint

我一直想知道为什么.Count不是无符号整数而不是有符号整数?

例如,拿ListView.SelectedItems.Count.元素的数量不能少于0,那么为什么它是一个有符号的int?

如果我尝试测试是否有选择的元素,我想测试

 if (ListView.SelectedItems.Count == 0) {}
Run Code Online (Sandbox Code Playgroud)

但因为它是有符号整数,我必须测试

 if (ListView.SelectedItems.Count <= 0) {}
Run Code Online (Sandbox Code Playgroud)

或者有什么情况.Count可能<0?

.net c#

47
推荐指数
4
解决办法
5813
查看次数

如何调整表单大小以自动适应其内容?

我试图实现以下行为:

在表格上有一个tabcontrol.在那个tabcontrol上有一个树视图.为了防止出现滚动条,我希望表单在第一次显示时根据树视图的内容更改其大小.

如果树视图中有太多节点要显示在表单的默认大小上,则表单应更改其大小,以便树视图上没有垂直滚动条(最大为屏幕大小允许的最大大小).

我需要知道的是,是否可以通过控件的属性实现此行为.我确信这可以通过以编程方式计算和设置元素的大小来实现,但我想知道是否有办法通过AutoSizeMode等设置实现这一点.

[UPDATE]

这是我的应用程序的用户看到的第一个对话框:它是一个选择要使用的数据库的对话框.这是一个数据库列表,带有tabcontrol,buttens等.如果列表太长,则会出现滚动条,我的同事希望它们消失.

.net c# winforms

31
推荐指数
5
解决办法
12万
查看次数

如何"实现"编程语言?

也许这只是一个小小的误解,但是如何实现编程语言呢?

我不是在谈论如何实现我自己的编程语言,而是关于"已实现"这个词?我的意思是,你可以实现编译器或解释器,但是编程语言?

如果我读"C++是用C实现"还是"Python用C实现"是什么意思?

我认为一种语言更为严肃.就像某人如何思考事情的协议一样.例如,如果他想要显示一个消息框,他可以说这个命令是ShowMessageBox(字符串)并实现一个编译器,它将把它转换为在计算机上工作的东西(除了他想象的选定的编程范例).

我认为这个问题导致了"现实中的编程语言是什么"的问题?关于如何用语言实现事物的编译器,解释器或文档语言标准?

[编辑]

答:语言从未实现,只有编译器/口译员等.就是这么简单.

programming-languages

22
推荐指数
5
解决办法
6482
查看次数

异常处理:抛出后最终执行?

假设您有以下代码:

而不是做:

Try
    '
    ' Initialize some objects
    '

    '
    ' do something that fails
    '

    '
    ' Clean up-code that gets not reached because exception
    '
Catch e As Exception
    '
    'Clean up initialized objects
    '

    Throw e
End Try
Run Code Online (Sandbox Code Playgroud)

我想要做:

Try
    '
    ' Initialize some objects
    '

    '
    ' do something that fails
    '
Catch e As Exception
    Throw e
Finally
    '
    'Clean up initialized objects
    '
End Try
Run Code Online (Sandbox Code Playgroud)

所以我的简单问题是:如果出现异常,即使之前有一些行,也会达到finally块?

[编辑] 感谢您的快速解答.

在第一行中我会想到NullReference-,COM-和FileNotFound-Exceptions.

好的,我会去找这个代码:

Try
    '
    ' Initialize …
Run Code Online (Sandbox Code Playgroud)

.net vb.net exception-handling

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

如何在C#静态和非静态方法之间做出决定?

[编辑]

我的原始问题是"为什么要在静态和非静态之间做出决定?两者都是一样的......"

不幸的是,它被编辑成一个C#特定的问题,我真的想避免.

所以,让我做一些补充:

当我说接口时,我不是指C#-keyword接口,而是我理解的东西,比如C++接口:一组定义良好的函数来操作我的对象.当说削弱我的界面时,我的意思是我有不同的功能(静态/非静态)做同样的事情.当有不同的功能来做同样的事情时,我的界面不再明确定义.

所以,正如看门人Bob发布的那样,我可以实现一个Validate()函数

Document.Validate(myDocumentObject);    
Run Code Online (Sandbox Code Playgroud)

但是也

myConcreteDocumentObject.Validate();
Run Code Online (Sandbox Code Playgroud)

要返回我的Copy() - 示例可以实现Copy()之类的

myConcreteDocument.Copy(toPath);
Run Code Online (Sandbox Code Playgroud)

但是也

Document.Copy(myConcreteDocumentObject, toPath)
Run Code Online (Sandbox Code Playgroud)

要么

Document.Copy(fromPath, toPath)
Run Code Online (Sandbox Code Playgroud)

当我想到一个文件夹,其中包含属于我的Document的所有文件(在这种情况下,我不依赖于具体的实例 - 但我依赖于其他东西:)).

一般来说,我说的是静态方法,而不是静态类(对不起,如果我忘了推荐).

但正如Anton Gogolev所说,我认为我的文档课不是一个很好的例子而且没有很好的设计,所以我想我必须看看单一责任原则.

我还可以实现某种与DocumentClass一起运行的ManagerClass:

例如:

myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath);
Run Code Online (Sandbox Code Playgroud)

要么

myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath);
Run Code Online (Sandbox Code Playgroud)

但是,如果我参考方法1)我倾向于创建自己执行任务的对象,而不是使用我的DocumentObject 执行某些操作的其他对象(DocumentManager).

(我希望这不会采取关于OOP的宗教讨论的方向;).)

[/编辑]


旧版:

起初这似乎是一个非常基本的问题,比如"何时使用静态方法,何时不使用",但这是我偶尔遇到的问题(我很难描述真正的问题是什么;也许只是为了得到原因(不)使用1)或为什么(不)使用2)).

(虽然我使用的是C#-Syntax但这不是C#限制的问题)

在OOP中,有两种处理对象的方法(以及其他方法):

1)如果我想要我的对象做某事,我只是告诉他这样做:

myConcreteObject.DoSomething();
Run Code Online (Sandbox Code Playgroud)

这就像和一个对象交谈一样.

2)或者如果你是静态方法的粉丝:

ObjectClass.JustDoIt();
Run Code Online (Sandbox Code Playgroud)

在某种程度上,我认为静态函数只是"感觉"更好.所以我倾向于经常使用静态方法(独立于具体实例 - 独立性总是好事).

所以,在设计课程时,我经常要决定是采用方法1)还是方法2):

想象一下,你有一个"文档"类,它应该代表一个应该保存到数据库中的文档:

一个文件

  • 由来自文件系统的一个或多个图像文件组成(这些文件成为单个文档页面)
  • 有类似参考书目的字段 - 用户可以添加有关文档的信息的字段 - 保存到额外的文件中
  • 并且应该有一些操作,如Copy(),AddPage(),RemovePage()等.

现在我遇到了几种创建这个类的方法:

//----- 1) non static approach/talking to objects -----
Document newDocument = new Document();

// Copy document to x (another …
Run Code Online (Sandbox Code Playgroud)

c# oop class-design

14
推荐指数
4
解决办法
9827
查看次数

是否有stl或boost函数来确定字符串是否为数字?

我对C++,提升等很陌生.

我想知道在boost或STL中是否已有函数我可以用来确定字符串是否为数字.

数字字符串可能如下所示:100

要么

100.52

我知道有很多例子如何编写这样的函数,但我想知道是否已经有一个我可以使用的函数.

我正在寻找一个纯C++ - 解决方案,而不是C.

[更新:我已经使用lexical_cast来转换我的字符串了,我只是想知道是否有像is_numeric这样的方法可以用于此...]

c++ boost stl

11
推荐指数
3
解决办法
9841
查看次数

何时混合语言?

什么情况下语言应该混合?

我不是在谈论将ASP.NET与C#和HTML一起使用,或者是用C语言编写的应用程序通过SQL查询访问SQL数据库.我正在谈论的事情,例如将C++与Fortran或Ada与Haskell等混合使用.

[编辑]

首先:谢谢你的所有答案.

当我问这个问题时,我记得你总是读"每种语言都有其特殊用途".

通常,您可以使用特殊库来获得几乎所有语言的完成.但是,如果您有兴趣学习不同的语言,为什么不采用最符合您目的的编程语言而不是解决您的语言最初不是为其设计的问题的库?

programming-languages mixing

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

检查函数参数的最佳方法:检查null或try/catch

在实现/使用返回或使用对象实例的方法时,检查函数参数的最优雅方法是什么?

致电方法:

someType GetSomething(object x)
{
    if (x == null) {
        return;
    }

    //
    // Code...
    //
}
Run Code Online (Sandbox Code Playgroud)

或更好:

someType GetSomething(object x)
{
    if (x == null) {
        throw new ArgumentNullException("x");
    }

    //
    // Code...
    //
}
Run Code Online (Sandbox Code Playgroud)

通话方式:

void SomeOtherMethod()
{
    someType myType = GetSomething(someObject);

    if (someType == null) {
        return;
    }

}
Run Code Online (Sandbox Code Playgroud)

或更好:

void SomeOtherMethod()
{
    try {
        someType myType = GetSomething(someObject);
    } catch (ArgumentNullException) {
    }
}
Run Code Online (Sandbox Code Playgroud)

浏览类似问题时,不使用try/catch的原因是性能.但恕我直言,尝试捕获只是看起来更好:).

那么,哪种方式更"优雅"?

c# methods exception-handling robustness

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

一般如何在 DateTimePicker-Control/Controls 中获取按钮的宽度?

我实现了一个自定义的 DateTimePicker。在 DateTimePicker 上有一个按钮。在示例中,我发现它的宽度设置为 16。这是有效的,但我想要一种动态方法。

那么,有没有办法获取这个按钮的大小,或者有没有一种通用的方法来获取有关 .Net-Control 子元素(如大小等)的信息?

尝试 DateTimePicker.Controls 对我没有帮助(它是空的)。

在此处输入图片说明

.net c# user-controls winforms

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

为什么WinAPI与"普通"C有很大不同?

我想知道为什么WinAPI与"普通"C编程有很大的不同?

我的意思是,在学校我了解到每个C程序都有一个main()函数(WinAPI使用带有一些特殊参数的WinMain),一些变量类型,如int,long,char等.(WinAPI使用类似LPCSTR,BOOL等的东西)那么为什么微软决定采用与他们的OS API不同的方式呢?

当我看到我的第一个WinAPI程序时,它看起来更像是一种新语言...;)

winapi

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