在Delphi中,我可以这样做:
try
if not DoSomething then
Exit;
if not DoSomething2 then
Exit;
if not DoSomething3 then
Exit;
finally
DoSomethingElse;
end;
Run Code Online (Sandbox Code Playgroud)
在其他方法中,如果方法DoSomething
结果为假,则程序流被转移到finally块,DoSomething2
并且DoSomething3
不执行.
如何在C#中实现这种行为?
提前致谢.
Edit1: 以下示例无法在VS 2008中编译
编辑2:对不起,我要快速忘记退货声明;
XElement OrderStatus(q_order_status Request)
{
XElement Response;
try
{
if (DoSomething() != 0 )
{
return;
}
}
catch(Exception e)
{
// catch some errors and eventually pass the e.Message to the Response
}
finally
{
Response = new XElement("SomeTag", "SomeResponse");
}
return Response;
}
Run Code Online (Sandbox Code Playgroud)
Edit3: 经过测试,似乎最简单的方法是在结果 …
我正在构建一个物理引擎,我有一些"伪verlet"的东西,我想把它升级到"真正的"verlet.所以我找到了一篇文章并开始工作.在我添加了我认为是一个很好的近似值后,引擎不再工作了.有人能帮助我理解我做错了什么吗?
我的主要物理体类的更新,应用力和应用脉冲系统:
public void Update(float timestepLength)
{
if (!this._isStatic)
{
Vector2 velocity = Vector2.Subtract(_position, _lastPosition);
Vector2 nextPos = _position + (_position - _lastPosition) + _acceleration * (timestepLength * timestepLength);
_lastPosition = _position;
_position = nextPos;
_acceleration = Vector2.Zero;
}
}
public void ApplyForce(Vector2 accelerationValue)
{
if (!this._isStatic)
_acceleration += (accelerationValue) * _mass;
}
public void ApplyImpulse(Vector2 impulse)
{
if (!this._isStatic)
_acceleration +=-1 * impulse;
}
Run Code Online (Sandbox Code Playgroud)
编辑: 我已修复它,它就像一个魅力,但我对以下代码有两个问题:
这是代码:
public Vector2 Position
{
get { return _position; }
set …
Run Code Online (Sandbox Code Playgroud) 考虑以下 :
int increment1 (const int & x)
{ return x+1; }
int increment2 (const int x)
{ return x+1; }
Run Code Online (Sandbox Code Playgroud)
我理解传递对类对象的引用,但是我想知道是否值得将引用传递给简单类型?哪个更优化?通过引用传递或通过值传递(在simle类型的情况下?)
如何将Enum转换为Key,Value Pairs.我已经用C#3.0转换了它.
public enum Translation
{
English,
Russian,
French,
German
}
string[] trans = Enum.GetNames(typeof(Translation));
var v = trans.Select((value, key) =>
new { value, key }).ToDictionary(x => x.key + 1, x => x.value);
Run Code Online (Sandbox Code Playgroud)
在C#1.0中,这样做的方法是什么?
我们有一个使用许多库的ac#应用程序(我们也写过)。该应用程序取决于不同的库,某些库取决于其他一些库。
现在,在测试应用程序时,我们还需要确保所有库均正常运行。问题在于该应用程序仅使用这些库的少量功能。我可以使用NCover之类的东西来查找实际使用的库类,但是我也很想知道这些类(跨应用程序和不同库)是如何组织的-它们的依赖关系结构。
所以我的问题是:我希望能够运行我的应用程序,然后获取按依赖项(即,什么调用/使用什么)组织的所用类的列表。
有人知道有任何工具(免费或不收费)可以让您做到这一点?VS2008中的代码全部以不同的libs / app作为项目进行组织。
我想创建一个具有以下结构的XML文件.任何人都可以给我一个可以序列化/反序列化这个XML的类吗?
<Disposition>
<DispositionTextList Description="">
<DispositionText value="">
<DispositionText value="">
</DispositionTextList>
<DispositionTextList Description="">
<DispositionText value="">
<DispositionText value="">
</DispositionTextList>
</Disposition>
Run Code Online (Sandbox Code Playgroud) 我正在使用一个MKMapView
包含几个MKAnnotation
引脚.
在地图上方,我显示了UITableView
有关MKAnnotation
针脚的详细信息.
我的问题:当我选择一个引脚时,我想选择相应的表格单元格.为此,如果选择了引脚,我想捕获一个事件/委托.我不是在谈论呼叫标注配件
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
Run Code Online (Sandbox Code Playgroud) 我需要上传至少1GB
文件大小的大文件.我正在使用ASP.Net
,C#
并IIS 5.1
作为我的开发平台.
我在用:
HIF.PostedFile.InputStream.Read(fileBytes,0,HIF.PostedFile.ContentLength)
Run Code Online (Sandbox Code Playgroud)
使用前:
File.WriteAllBytes(filePath, fileByteArray)
Run Code Online (Sandbox Code Playgroud)
(不会去这里,但给出System.OutOfMemoryException
例外)
目前我已经设置httpRuntime
为:
executionTimeout =" 999999 "maxRequestLength =" 2097151 "(多数2GB!)useFullyQualifiedRedirectUrl ="true"minFreeThreads ="8"minLocalRequestFreeThreads ="4"appRequestQueueLimit ="5000"enableVersionHeader ="true"requestLengthDiskThreshold ="8192"
我也设置了maxAllowedContentLength="**2097151**"
(猜它只适用于IIS7)
我已将IIS
连接超时更改为999,999秒.
我无法上传偶数文件4578KB
(Ajaz-Uploader.zip)
程序从某种语言编译为ASM - >机器代码(可直接执行).当人们说这是依赖于平台时,二进制文件形成的意思将仅在具有相同指令集架构的CPU(如x86,x86-64)上运行(正确).由于ISA的不同,它可能(不正确)/可能不会(根本没有)在其他进程上运行.对?
现在,二进制的概念令我感到困惑.一切都与"机器语言代码"和"CPU"有关.操作系统在哪里发挥作用?我的意思是编译后的二进制文件在加载到内存时有CPU的直接指令.&CPU一次执行一条指令.除了流程管理链接文本之外,我无法看到操作系统的任何角色.无论操作系统如何,它都应该在同一个ISA的CPU上运行.对?
但事实并非如此.如果我在Windows机器上为x86构建代码.它不能在Mac x86机器或Linux x86机器上运行.
我在这里遗漏了一些东西.请清除我的困惑.
Windows可以选择打开具有独占访问权限的文件.Unix没有.
为了确保对某些文件或设备的独占访问,在Unix中通常的做法是使用通常存储在/ var/lock目录中的锁文件.
open( "/var/lock/myLock.lock", O_RDWR | O_CREAT | O_EXCL, 0666 )
如果锁定文件已存在,则C指令返回-1,否则创建它.该函数是原子的,确保没有竞争条件.
释放资源后,将通过以下指令删除锁定文件
remove( "/var/lock/myLock.lock" )
.
这种方法存在两个问题.
程序可以在不移除锁定的情况下终止.例如,因为它被杀死,崩溃或其他什么.锁定文件保持不变,即使不再使用,也会阻止对资源的任何访问.
锁定文件是使用组和世界写入权限创建的,但通常的做法是将帐户配置为使用将清除组和世界写入权限的权限掩码.因此,如果我们有一个可靠的方法来确定锁是孤立的(不使用),则不允许不是文件所有者的用户将其删除.
为了记录,我使用锁定文件来确保对连接到串行端口的设备(实际上是/ dev/ttyUSBx)的独占访问.咨询方法,需要合作,没关系.但应确保不同用户之间的独占访问.
是否有比锁文件更好的同步方法?如何确定创建锁文件的进程是否仍在运行?如果不使用,如何让其他用户删除锁定文件?
我想出的一个解决方案是将该文件用作Unix套接字文件.如果文件存在,请尝试使用该文件进行连接.如果失败,我们可能会认为文件的所有者进程已经死亡.这需要accept()
在所有者进程中的套接字上循环一个线程.不幸的是,系统不再是原子的.
c# ×6
.net ×2
c++ ×2
cocoa-touch ×1
delphi ×1
dependencies ×1
file ×1
ios ×1
locking ×1
mkmapview ×1
physics ×1
testing ×1
uitableview ×1
unix ×1
xna ×1