在MSDN建议把的实现类的一个实例化IDisposable到一个using块.或者,如果它正在一个try-catch块中实例化,那么Dispose在Finally.
using在try-catch块中使用块是否有任何问题?
try
{
using (Foo bar = new Foo())
{
bar.doStuff();
}
}
catch (Exception e)
{
//vomit e
}
Run Code Online (Sandbox Code Playgroud)
当然我可以打电话给Dispose一个Finally街区,但我是编程的新手,我只是想知道做这样的事情是否实际上是可以接受的,或者是否有人会打我的后脑并对我大喊大叫我是Doing-It-Wrong™.
或者更确切地说,我更有兴趣知道为什么会出现这种错误.
我对编程很新,而且我对OOP的知识有限,我决定使用事件在我的课程之间进行交流.当然,这将导致相当多的事件.
我想知道使用事件是否还有额外的开销?我假设除非事件被执行(即,类中有一个监听器根据被触发的事件执行一个函数),那么实际上应该没有太大的影响.但是我并不熟悉C#中的事件,并且想要确认是否仅仅因为触发事件而产生了大量的额外开销?
我正在尝试学习AS3并遇到了一个小问题.
我有一个Bitmap类,我添加了一个MouseEvent.CLICK监听器,但似乎没有调度该事件.
我使用Flashdevelop编写AS3代码和Flex编译.
我有两节课,Enemy.as和Player.as
该Player.as如下所示:
package Player
{
import flash.display.Sprite;
import flash.events.MouseEvent;
[Embed(source="../../assets/leek.swf", symbol="Leek")]
public class Player extends Sprite
{
public function Player()
{
trace("Player constructed");
addEventListener(MouseEvent.CLICK, handleClick);
}
private function handleClick(e:MouseEvent):void
{
trace("Clicked Player");
}
}
}
Run Code Online (Sandbox Code Playgroud)
该Enemy.as如下所示:
package enemies
{
import flash.display.Bitmap;
import flash.events.MouseEvent
[Embed(source="../../assets/gardengnome.png")]
public class Enemy extends Bitmap
{
public function Enemy()
{
trace("enemy constructed");
addEventListener(MouseEvent.CLICK, handleClick);
}
private function handleClick(e:MouseEvent):void
{
trace("Clicked Enemy");
}
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个程序要求用户多次输入输入,并将输入存储在不同的char变量中,然后对这些变量执行操作.
我的问题是我想限制输入一次为一个变量工作.例如:
char a = 'a', b = 'b', c = 'c';
cout << "Enter a ";
cin >> a;
cout << "\nEnter b ";
cin >> b;
cout << "\nEnter c ";
cin >> c;
cout << "Entered chars were " << a << ", " << b << ", " << c;
Run Code Online (Sandbox Code Playgroud)
运行这个,如果用户输入tyu(包括字母之间的空格)将使程序输入t变量a,y输入变量b,u输入变量c.从本质上讲,它会有点"掉头"并自动为cin设置值,而不是要求用户为每个人执行此操作.
我想要的是检查用户为变量a输入的内容仅为1个字符.
我尝试过使用cin.good(),但在为cin >> a输入多个字符后它返回0; 我也尝试过使用cin.get(a); 然后检查cin.good().如果用户输入多个字符,这也会返回0.
有没有办法限制输入一次仅用于一个cin操作?
在我的代码中的某一点,我将Sprite的alpha设置为0.7
square.alpha = 0.7;
稍后在我的代码中,我在条件语句中检查这个alpha.
if (square.alpha == 0.7) {//do stuff}
我一直在摸不着为什么直到我做了一次trace(square.alpha);而没有工作,而不是0.7我得到了0.69921875.
0.69921875对于我设置为alpha为0.7的精灵的每个实例,这个数字()是相同的.
我做了一些测试,它看起来像唯一值alpha只返回相同的值,我将它们设置为0,0.5和1.其他任何东西似乎总是返回一个非常接近我设定的数字,但不完全.比如0.2会给我0.19921875
为什么会这样?
我使用Flex编译代码,不确定这是否对此有任何影响.
我是编程和.net的新手,我很难理解为什么使用List<T>(IEnumerable<T>)构造函数接受使用创建的数组[],但不接受使用创建的数组Array.CreateInstance(Type, Int32).
这是有效的:
DirectoryInfo[] dirsArray = foo.GetDirectories();
List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);
Run Code Online (Sandbox Code Playgroud)
这不是:
Array dirsArray = Array.CreateInstance(typeof(DirectoryInfo), 10); //assume we know 10 is the required length
List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);
Run Code Online (Sandbox Code Playgroud)
以上给出了以下编译器错误:
Error 1 The best overloaded method match for 'System.Collections.Generic.List<System.IO.DirectoryInfo>.List(System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>)' has some invalid arguments
Error 2 Argument 1: cannot convert from 'System.Array' to 'System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>'
Run Code Online (Sandbox Code Playgroud)
但我知道List<T>(IEnumerable<T>)可以接受任何IEnumerable作为论据.我知道那System.Array是IEnumerable.不仅因为它在引用中,而且因为使用[]构造函数语法的第一个示例工作正常.
那么这里的问题是什么?是否Array.CreateInstance以某种方式设法创建一个数组,是不是IEnumerable?