我刚刚安装了3.5 .NET Framework,并且在进行一些清理时我注意到我安装了很多旧版本(1.1,1.1 Hotfix(xxx),2.0,2.0 Service Pack等...).我想知道我是否可以安全地处理所有这些或者在运行较低版本的.net应用程序时需要这些.
提前致谢.
我在写一个控制库.在这个库中有一些自定义面板,其中填充了用户UIElements.由于我的lib中的每个子元素都必须具有"Title"属性,因此我写了以下内容:
// Attached properties common to every UIElement
public static class MyLibCommonProperties
{
public static readonly DependencyProperty TitleProperty =
DependencyProperty.RegisterAttached(
"Title",
typeof(String),
typeof(UIElement),
new FrameworkPropertyMetadata(
"NoTitle", new PropertyChangedCallback(OnTitleChanged))
);
public static string GetTitle( UIElement _target )
{
return (string)_target.GetValue( TitleProperty );
}
public static void SetTitle( UIElement _target, string _value )
{
_target.SetValue( TitleProperty, _value );
}
private static void OnTitleChanged( DependencyObject _d, DependencyPropertyChangedEventArgs _e )
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我写这个:
<dl:HorizontalShelf>
<Label dl:MyLibCommonProperties.Title="CustomTitle">1</Label>
<Label>1</Label>
<Label>2</Label>
<Label>3</Label>
</dl:HorizontalShelf>
Run Code Online (Sandbox Code Playgroud)
一切正常,属性获取指定的值,但如果我尝试将该属性绑定到其他一些UIElement DependencyProperty,如下所示: …
从逻辑的角度来看,一个应用程序可能需要数十个或数百个线程,其中一些线程将在大多数时间内休眠,但很少有线程将始终同时运行.问题是:产生比系统中的处理器更多的并发线程是否有意义,还是浪费?
我已经看到一些服务器应用程序实现了一个调度程序来逻辑地管理任务(通常称为作业),但也产生了很多线程,所以我没有看到它的好处.
提前致谢.
或者操作是否有可能失败?
谢谢.
我选择了错误的术语,我真正的意思是四舍五入到0,而不是截断.
关键是,我需要比较两个双精度的整数部分,我只是将它们转换为int然后使用==,但是,正如有人在我之前的一个问题中指出的那样,这可能会引发溢出异常,如果double不能适合整数.
所以问题是'使用==运算符来比较之前舍入为0的两个双精度是否正确,或者我应该坚持使用cast to int方法并捕获可能的异常?
据我所知,没有办法提示c#编译器内联一个特定的函数,我想这就像设计一样.
我也认为不要让程序员指定什么内联和什么不是通常是个好主意,因为这意味着你认为你比JIT编译器更聪明(我尊重那些实际上是那些人),但是,什么如果我想指定代码的关键部分需要以任何代价非常快,无论如何在目标机器上实现它?到目前为止,你不能做这样的事情,我想知道c#语言和JIT是否都支持这个功能.
就我而言,我知道目标机器是什么,我知道函数内联将有助于提高性能.这让我觉得强制执行函数内联的唯一方法是了解JIT在什么情况下会这样做,但我认为这也不是一个好主意,
关于这个问题的任何亮点都将非常感激.
谢谢.
我想编写一个简单的应用程序来跟踪它当前的内存使用情况,创建的对象的数量等.在C++中,我通常会覆盖new运算符,但由于显而易见的原因,我无法在C#中执行此操作.没有使用分析器,有没有办法做到这一点?
换句话说,使用是否正确:
public class CustomerList : System.Collections.Generic.List<Customer>
{
/// supposed to be empty
}
Run Code Online (Sandbox Code Playgroud)
代替:
using CustomerList = System.Collections.Generic.List<Customer>
Run Code Online (Sandbox Code Playgroud)
我宁愿使用第一种方法,因为我只需要定义一次CustomerList,每次我需要一个客户列表时,我总是使用相同的类型.另一方面,使用名称别名方法不仅迫使我必须在任何地方重新定义它,而且每次有人想要使用它时都会给出不同的别名(想想一个大团队),从而导致代码不太可读.
请注意,在这种情况下的意图永远不会扩展类,只是为了创建一个别名.
我试图弄清楚如何在树节点中实现一个函数,该节点返回其所有后代叶子(无论是直接还是间接).但是,我不想传递一个容器,其中叶子节点将递归放置(树可能很大),而是我想使用生成器迭代树.我尝试了一些方法,但到目前为止还没有一个方法.这是我最接近可能的解决方案:
public interface ITreeNode
{
IEnumerable<ITreeNode> EnumerateLeaves();
}
class Leaf : ITreeNode
{
public IEnumerable<ITreeNode> EnumerateLeaves()
{
throw new NotImplementedException();
}
}
class Branch : ITreeNode
{
private List<ITreeNode> m_treeNodes = new List<ITreeNode>();
public IEnumerable<ITreeNode> EnumerateLeaves()
{
foreach( var node in m_treeNodes )
{
if( node is Leaf )
yield return node;
else
node.EnumerateLeaves();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.我究竟做错了什么?如果在同一个函数中有一个yield语句,似乎递归地调用.EnumerateLeaves将不起作用.
任何帮助将非常感谢.提前致谢.
编辑:我忘了提到一个分支可以有叶子或分支作为子,因此递归.
我最近编写的程序中的一些数学函数返回了不可接受的值,例如NaN(可能是因为没有检查某些函数的输入参数).问题在于,很难找到哪些函数传递了错误的值.这会导致错误在整个代码中传播,并使程序在几分钟或几小时后崩溃,如果有的话.
我想知道是否有办法在任何操作产生NaN值的时候捕获这些错误操作(与一些C/C++编译器抛出的'DivisionByZero异常'几乎相同,如果我记得的话).
提前致谢.
PD:如果需要,请随时重新标记我的问题.
我正在x86汇编程序中编写一些程序来修改ZF作为返回布尔值的方法,所以我可以这样做:
call is_value_correct
jz not_correct
Run Code Online (Sandbox Code Playgroud)
我想知道这是否被认为是不好的做法,因为一些编码标准说应该在AX寄存器中返回简单的值.