我一直想知道为什么.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?
我试图实现以下行为:
在表格上有一个tabcontrol.在那个tabcontrol上有一个树视图.为了防止出现滚动条,我希望表单在第一次显示时根据树视图的内容更改其大小.
如果树视图中有太多节点要显示在表单的默认大小上,则表单应更改其大小,以便树视图上没有垂直滚动条(最大为屏幕大小允许的最大大小).
我需要知道的是,是否可以通过控件的属性实现此行为.我确信这可以通过以编程方式计算和设置元素的大小来实现,但我想知道是否有办法通过AutoSizeMode等设置实现这一点.
[UPDATE]
这是我的应用程序的用户看到的第一个对话框:它是一个选择要使用的数据库的对话框.这是一个数据库列表,带有tabcontrol,buttens等.如果列表太长,则会出现滚动条,我的同事希望它们消失.
也许这只是一个小小的误解,但是如何实现编程语言呢?
我不是在谈论如何实现我自己的编程语言,而是关于"已实现"这个词?我的意思是,你可以实现编译器或解释器,但是编程语言?
如果我读"C++是用C实现"还是"Python用C实现"是什么意思?
我认为一种语言更为严肃.就像某人如何思考事情的协议一样.例如,如果他想要显示一个消息框,他可以说这个命令是ShowMessageBox(字符串)并实现一个编译器,它将把它转换为在计算机上工作的东西(除了他想象的选定的编程范例).
我认为这个问题导致了"现实中的编程语言是什么"的问题?关于如何用语言实现事物的编译器,解释器或文档语言标准?
[编辑]
答:语言从未实现,只有编译器/口译员等.就是这么简单.
假设您有以下代码:
而不是做:
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) [编辑]
我的原始问题是"为什么要在静态和非静态之间做出决定?两者都是一样的......"
不幸的是,它被编辑成一个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):
想象一下,你有一个"文档"类,它应该代表一个应该保存到数据库中的文档:
一个文件
现在我遇到了几种创建这个类的方法:
//----- 1) non static approach/talking to objects -----
Document newDocument = new Document();
// Copy document to x (another …Run Code Online (Sandbox Code Playgroud) 我对C++,提升等很陌生.
我想知道在boost或STL中是否已有函数我可以用来确定字符串是否为数字.
数字字符串可能如下所示:100
要么
100.52
我知道有很多例子如何编写这样的函数,但我想知道是否已经有一个我可以使用的函数.
我正在寻找一个纯C++ - 解决方案,而不是C.
[更新:我已经使用lexical_cast来转换我的字符串了,我只是想知道是否有像is_numeric这样的方法可以用于此...]
什么情况下语言应该混合?
我不是在谈论将ASP.NET与C#和HTML一起使用,或者是用C语言编写的应用程序通过SQL查询访问SQL数据库.我正在谈论的事情,例如将C++与Fortran或Ada与Haskell等混合使用.
[编辑]
首先:谢谢你的所有答案.
当我问这个问题时,我记得你总是读"每种语言都有其特殊用途".
通常,您可以使用特殊库来获得几乎所有语言的完成.但是,如果您有兴趣学习不同的语言,为什么不采用最符合您目的的编程语言而不是解决您的语言最初不是为其设计的问题的库?
在实现/使用返回或使用对象实例的方法时,检查函数参数的最优雅方法是什么?
致电方法:
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的原因是性能.但恕我直言,尝试捕获只是看起来更好:).
那么,哪种方式更"优雅"?
我实现了一个自定义的 DateTimePicker。在 DateTimePicker 上有一个按钮。在示例中,我发现它的宽度设置为 16。这是有效的,但我想要一种动态方法。
那么,有没有办法获取这个按钮的大小,或者有没有一种通用的方法来获取有关 .Net-Control 子元素(如大小等)的信息?
尝试 DateTimePicker.Controls 对我没有帮助(它是空的)。

我想知道为什么WinAPI与"普通"C编程有很大的不同?
我的意思是,在学校我了解到每个C程序都有一个main()函数(WinAPI使用带有一些特殊参数的WinMain),一些变量类型,如int,long,char等.(WinAPI使用类似LPCSTR,BOOL等的东西)那么为什么微软决定采用与他们的OS API不同的方式呢?
当我看到我的第一个WinAPI程序时,它看起来更像是一种新语言...;)