虽然C#规范确实包含预处理器和基本指令(#define,#if等),但该语言没有与C/C++等语言相同的灵活预处理器.我认为缺乏这种灵活的预处理器是由Anders Hejlsberg做出的设计决定(尽管不幸的是,我现在找不到这个参考).根据经验,这肯定是一个很好的决定,因为当我做很多C/C++时,会创建一些非常糟糕的不可维护的宏.
也就是说,有很多场景我可以找到一个稍微灵活一点的预处理器.一些简单的预处理器指令可以改进以下代码:
public string MyProperty
{
get { return _myProperty; }
set
{
if (value != _myProperty)
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
// This line above could be improved by replacing the literal string with
// a pre-processor directive like "#Property", which could be translated
// to the string value "MyProperty" This new notify call would be as follows:
// NotifyPropertyChanged(#Property);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编写预处理器来处理这样极其简单的情况会不是一个好主意?Steve McConnell在Code Complete中写道(p208):
编写自己的预处理器 如果一种语言不包含预处理器,那么编写一个很容易...
我被撕裂了.将这样一个灵活的预处理器从C#中取出是一个设计决定.但是,我非常尊重的作者提到它在某些情况下可能没问题.
我应该构建一个C#预处理器吗?有没有可以做我想做的简单事情?
在WPF中,DataTrigger是否可以绑定到附加属性?
我本质上希望在附加属性上使用转换器,以在特定验证规则被破坏时提供样式.我正在使用如下标记:
<DataTrigger Binding="{Binding Path=Validation.Errors,
RelativeSource={RelativeSource Self},
Converter={StaticResource RequiredToBoolConverter}}"
Value="True">
<Setter Property="Background" Value="LightGreen" />
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)
但是,当这运行时,我得到以下内容:
System.Windows.Data错误:39:BindingExpression路径错误:'object'''TextBox'(Name ='')'上找不到'Validation'属性.BindingExpression:路径= Validation.Errors; DataItem ='TextBox'(Name =''); target元素是'TextBox'(Name =''); target属性是'NoTarget'(类型'对象')
如果我将DataTrigger绑定路径更改为"Text",我不会得到数据绑定错误(但当然它不提供我正在寻找的行为).
使用实体框架时,ESQL的性能是否优于Linq to Entities?
我更喜欢使用Linq to Entities(主要是因为强类型检查),但我的其他一些团队成员都将性能作为使用ESQL的理由.我想充分了解使用这两种方法的专家/骗子.
使用SQL Server 2008作为开发数据库的最佳方法是什么,但确保数据库与SQL Server 2005兼容?
随着.NET 3.5和IQueryable<T>界面的引入,将出现新的模式.虽然我已经看到了规范模式的许多实现,但我还没有看到使用这种技术的许多其他模式.Rob Conery的Storefront应用程序是另一个使用IQueryable<T>它可能导致一些新模式的具体示例.
有用的IQueryable<T>界面出现了什么样的模式?
我正在遵循WPF UI 的MV-VM模式.我想将一个命令连接到TextBox的TextChanged事件到我的ViewModel类中的命令.我可以设想完成此任务的唯一方法是继承TextBox控件,并实现ICommandSource.然后,我可以指示从TextChanged事件触发该命令.对于看起来如此简单的事情来说,这似乎太过分了.
是否有一种更简单的方法(比继承TextBox和实现ICommandSource)将TextChanged事件连接到我的ViewModel类?
在没有安装ASP.NET MVC 3的服务器上部署ASP.NET MVC 3应用程序时,需要将哪些文件标记为"True"?
你如何检测你的用户界面?在过去,我读过人们已经为他们的用户界面进行了检测,但我没有找到关于如何测量 UI的示例或提示.
通过仪表,我的意思是收集有关系统使用和性能的数据.有关Instrumentation的MSDN文章是http://msdn.microsoft.com/en-us/library/x5952w0c.aspx.我想捕获用户点击的按钮,他们使用的键盘缩写,他们用来搜索的术语等.
具体来说,我正在WPF中实现我的UI,因此与基于Web的应用程序相比,这将提供额外的挑战.(即需要将仪表化数据传回中心位置等).也就是说,我觉得这项技术可以通过附加属性等概念提供更简单的仪器实现.
编辑:以下博客文章提出了一个有趣的解决方案:Pixel-In-Gene博客:WPF应用程序上的UI审计技术
我最近一直在研究针对我正在构建的WPF应用程序的.NET客户端配置文件.但是,我很沮丧地注意到客户端配置文件仅对以下操作系统配置有效:
此外,客户端配置文件是不是有效的针对x64或IA64版本; 如果已安装任何以前版本的.NET Framework,也不会安装.
我想知道将额外的OS配置添加到测试矩阵中的努力是否值得付出努力.是否有可用的指标表明可能从客户端配置文件中受益的用户百分比?我相信一旦安装了.NET Framework,额外的信息就会作为Web请求的一部分传递给Web服务器,表明框架可用.当然,我认为没有安装.NET Framework的Windows XP SP2用户会有很多人.那么问题是我的申请是否专门针对这些人.
有没有其他人确定是否值得为这些特定用户定位额外的努力?
编辑:如果您使用客户端配置文件中未包含的功能,似乎可能会收到编译器警告.由于我通常将警告作为错误运行,因此希望能够最大限度地减少此配置中的测试.当然,这个配置仍然需要测试,但它应该像测试安装/初始运行是否适用于XP + SP2 +一样简单.
是否可以在WPF中为通用基本控件提供默认样式?
假设我有以下基类:
public abstract class View<T> : ContentControl
where T : ViewModel
{
static View()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(View<T>),
new FrameworkPropertyMetadata(typeof(View<T>)));
}
// Other properties, methods, etc in here
}
public abstract class ViewModel
{
// Other properties, methods, etc in here
}
Run Code Online (Sandbox Code Playgroud)
假设我有两个继承自这些基类的类:
public partial class TestView : View<TestViewModel>
{
public TestView()
{
InitializeComponent();
}
// TestView specific methods, properties, etc
}
public class TestViewModel : ViewModel
{ /* TestViewModel specific methods, properties, etc */ }
Run Code Online (Sandbox Code Playgroud)
现在我想为我的派生控件使用的基本控件提供一个默认样式:
<Style TargetType="{x:Type local:View`1}">
<Setter …Run Code Online (Sandbox Code Playgroud) wpf ×4
.net ×1
.net-3.5 ×1
asp.net-mvc ×1
binding ×1
c# ×1
command ×1
datatrigger ×1
deployment ×1
entity-sql ×1
iqueryable ×1
linq ×1
mvvm ×1
sql-server ×1