在catch块中有一个return语句是错误的吗?有哪些替代方案?
即:
public bool SomeFunction()
{
try
{
//somecode
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
return false;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个普通的C#POCO.在班级,我正在装饰对象[Serializable()].
也就是说,我Sum()在其中一个属性上使用Linq ,并且在序列化时收到错误.如果可能的话,我想简单地忽略这个属性.但是,[XmlIgnore()]它仅用于Xml序列化,而不是二进制.任何想法或想法?
代码是这样的,我想忽略ValueTotal:
[Serializable()]
public class Foo
{
public IList<Number> Nums { get; set; }
public long ValueTotal
{
get { return Nums.Sum(x => x.value); }
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个关联操作>>.问题是它的成本线性地取决于其左操作数的大小.所以由一系列类似的n应用程序形成的表达式>>
a >> a >> a >> a >> a >> ... >> a
Run Code Online (Sandbox Code Playgroud)
它具有二次成本n,因为默认中缀运算符是左关联的.如何使它成为右关联,以便这样的表达式的成本保持线性n?
以下代码生成两个CA2000警告(除此之外,但这不是重点).
public sealed class Item: IDisposable
{
public void Dispose() {}
}
public sealed class ItemContainer
{
public void Add(Item item)
{
}
}
public sealed class Test: IDisposable
{
private ICollection<Item> itemCollection;
private ItemContainer itemContainer;
private void Add(Item item)
{
itemCollection.Add(item);
}
public void Initialize()
{
var item1 = new Item(); // no warning
itemCollection.Add(item1);
var item2 = new Item(); // CA2000: call Dispose on object item2
Add(item2);
var item3 = new Item(); // CA2000: call Dispose on object …Run Code Online (Sandbox Code Playgroud) 使用COM对象考虑以下C#代码.
MyComObject o = new MyComObject;
try
{
var baz = o.Foo.Bar.Baz;
try
{
// do something with baz
}
finally
{
Marshal.ReleaseComObject(baz);
}
}
finally
{
Marshal.ReleaseComObject(o);
}
这将释放COM对象o和baz,而不是临时对象returnd的o.Foo和o.Foo.Bar.当这些对象拥有大量非托管内存或其他资源时,这可能会导致问题.
一个明显但丑陋的解决方案是,使用try-finally和更加混乱代码Marshal.ReleaseComObject.请参阅
C#+ COM Interop,确定性版本
作为一种解决方法,我创建了一个帮助类
class TemporaryComObjects: IDisposable
{
public C T<C>(C comObject)
{
m_objects.Add(comObject);
return comObject;
}
public void Dispose()
{
foreach (object o in m_objects)
Marshal.ReleaseComObject(o);
}
}
用法:
using (TemporaryComObjects t = new TemporaryComObjects())
{ …Run Code Online (Sandbox Code Playgroud) 我想通过Dotfuscator模糊我的汇编文件(*.dll,*.exe).我的问题是,如果我这样做,我仍然可以使用原始名称(我的意思是混淆之前的名称)并使用System.Reflection方法来处理这些程序集中的类和类型吗?
如果您需要更多细节,请告诉我
通常情况下,我非常善于在没有指导的情况下计算和研究问题,但是我遇到了一个问题.我正在尝试使用C#创建一个"事件"(我以前没有做过)我查找的所有东西都与我需要的东西无关.
当form2被隐藏时,我试图在我的主窗体上调用一个类.我发现了一些应该检查form2是否关闭的代码 - 要么我没有正确地将它集成到我的代码中,要么关闭与隐藏不同.
所以只是为了澄清我想要像这样运行程序:
我正在尝试创建一个类似于ELIZA的程序.我倾向于用一般语言实现这个项目,比如ruby,java,C++.是否有一些框架(开源将是伟大的)可用于任何这些语言?
我有两个4x4 OPENGL矩阵 -
第一个矩阵保持对象在第0帧的旋转和位置.
第二矩阵保持物体在框架X处的旋转和位置;
我想检索一个对象在第0帧和第X帧之间的移动偏移,这是否足够(可能)如果我只减去它们?
CMatrix4x4 offsetMatrix = matrixAtFrameX - matrixAtFrame0;
Run Code Online (Sandbox Code Playgroud)
我正在做的是每帧导出骨骼变换矩阵,其中该矩阵是动画的帧0和帧X之间的变换的偏移.
我可以减去两个矩阵吗?
结果是什么?
我有很多像这样的警告,我不知道他们的意思.
有谁知道这是什么?
"至少有一个'IOleWindow.GetWindow'的参数不能由运行时编组器封送.因此,这些参数将作为指针传递,并且可能需要操作不安全的代码."
我还应该指出它与"c:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets"有关
c# ×7
.net ×3
com-interop ×2
associative ×1
bots ×1
c++ ×1
chat ×1
com ×1
dotfuscator ×1
events ×1
interop ×1
java ×1
math ×1
matrix ×1
obfuscation ×1
opengl ×1
ruby ×1
scala ×1
warnings ×1
winforms ×1