Tag: c# 4.0

对值类型和引用类型使用C#LINQ表达式

我正在使用MVC for REST,以便我可以利用Razor输出不同类型。 CSV是这些输出之一。 而不是为每种输入类型编写此模板: ID,Created,Content @foreach (var item in Model.TimeData) { @item.ID,@item.Created,”@Html.Raw(item.Content.Replace(“\””, “\”\””))” } 我想利用params和System.Linq.Expressions.Expression写下这样的东西: @{ Html.WriteCsv(Model.TimeData, p => p.ID, p => p.Created, p => p.Content); } 我开始编写一个通用的HtmlHelper并很快意识到我遇到了值类型的问题(memberExpression将为null)。 下面的代码试图写出CSV标题(ID,Created,Content),但它只输出“Content”(因为ID和Created是值类型( int和DateTime )。 public static void WriteCsv(this HtmlHelper htmlHelper, List list, params Expression<Func>[] expressions) { foreach (var expression in expressions) { MemberExpression memberExpression = expression.Body as […]

枚举可以返回字符串而不是整数吗?

我希望我的枚举返回字符串值。 不是Enum Description,它们必须返回一个字符串值,而不是int。 下面的代码示例正是我的想法,但显然无法编译。 public enum TransactionType { CreditCard = “C”, DebitCard = “D”, CreditCardAuthenticationWithAuthorization = “CA”, DebitCardAuthenticationWithAuthorization = “DA” } 有任何想法吗?

在C#中协变使用genericsLazy类

假设这适用: public class Cat : Animal { } 并假设我有一个方法: public void Feed(Animal animal) { … } 我可以这样称呼它: var animal = new Cat(); Feed(animal); 当Feed被重构为仅支持Lazy作为参数时,如何才能使其正常工作? 我想传入我的var lazyAnimal = new Lazy(); 不知何故。 这显然不起作用: var lazyAnimal = new Lazy(); Feed(lazyAnimal);

在WCF服务中触发并忘记

我在Azure上有一堆WCF REST服务。 在一些WCF服务中,我调用Http请求(比如发送Email / sms)到外部服务。 http请求非关键的第三方服务 。 我不希望这阻止我对客户端调用的响应。 需要一些关于在这种情况下使用的模式的指导。 这是我的wcf服务中的fire and forget模式。 WCF服务的伪代码 [WebInvoke(UriTemplate = “process”, Method = “POST”)] [OperationContract] public bool DoSomeProcessing(DataEntity data) { bool result = ProcessData(data); //I do not want this call to block SendSMS(); } //Call to third party public void SendSMS() { HttpWebRequest objWebRequest = null; HttpWebResponse objWebResponse = null; […]

asp.net gridview checkall和uncheckall在一个标题复选框中

我使用以下代码管理gridview check all并取消选中单个标题复选框中的all。 我能够找到标题复选框状态grid.rows [0] .cells [0] .checked总是返回undefined。 请帮我这样做。 function checkAll() { var grid = document.getElementById(“”); if (grid.rows.length > 0) { for (i = 1; i < grid.rows.length; i++) { cell = grid.rows[i].cells[0]; for (j = 0; j < cell.childNodes.length; j++) { //if childNode type is CheckBox if (cell.childNodes[j].type == "checkbox") { if(grid.rows[0].cells[0].checked == true) […]

为什么绑定设置在.NET 4与.NET 3.5中的行为不同

我有一个应用程序,我最近从VS 2008 .NET 3.5项目转换为VS2010 .NET 4项目。 转换后,项目中的某些WPF对话框的行为有所不同。 我想了解是什么导致了这种行为上的差异,所以我可以找到并修复现在可能存在问题的其他方面。 作为一个例子,我有一个MVVM对话框,让用户输入一个数字。 该数字在内部存储为double,如果用户输入的文本是有效的double,则用户只能接受该对话框。 所以我有一个文本框绑定到ViewModel中的字符串,并且一个OK按钮仅在字符串是有效的double时启用。 相关的Xaml看起来像这样: OK ViewModel看起来像: class ViewModel : INotifyPropertyChanged { private double actualValue; public string ValueString { get { return actualValue.ToString(“G3”); } set { double doubleValue; if (double.TryParse(value, NumberStyles.Float, CultureInfo.CurrentCulture, out doubleValue)) { actualValue = doubleValue; ValueIsValid = true; RaisePropertyChanged(“ValueString”); } else { ValueIsValid = false; […]

是否有奇怪的重复模板模式的替代品?

在过去的几周里,我以奇怪的重复模板模式给自己带来了一些麻烦。 继我的这两个问题之后: 按值检索自定义枚举类的正确方法是什么? 当第一次访问静态类是基类上的静态方法时,为什么我的静态对象没有被实例化? 如何改进以下示例: public class DocketType : Enumeration { public static DocketType Withdrawal = new DocketType(2, “Withdrawal”); public static DocketType Installation = new DocketType(3, “Installation”); private DocketType(int docketTypeId, string description) : base(docketTypeId, description) { } } 我想要一个静态方法,我不必在Enumeration类中重复: public abstract class Enumeration : IComparable where TEnum : Enumeration { protected Enumeration(X value, Y displayName) […]

如何通过代码在一个实例中创建另一个.NET程序实例?

我需要能够在按钮单击的同时创建另一个全新的程序实例,同时保留现有实例。 this.ShowDialog(new Form1()); 上面的语句使当前表单成为新表单的所有者,我需要第二个实例独立于现有实例。 谁能帮我这个?

为什么这段代码不会以死锁结束

我有这个C#代码: public class Locking { private int Value1; private int Value2; private object lockValue = new Object(); public int GetInt1(int value1, int value2) { lock (lockValue) { Value1 = value1; Value2 = value2; return GetResult(); } } public int GetInt2(int value1, int value2) { lock (lockValue) { return GetInt1(value1, value2); } } private int GetResult() […]

我可以在C#中实现从派生类复制的“复制构造函数”吗?

一个应用程序特定示例来说明我的直接问题: 我有一个元数据提供程序类与以下(删节)接口: public class CtsDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider { protected override ModelMetadata CreateMetadata(IEnumerable attributes, Type containerType, Func modelAccessor, Type modelType, string propertyName) { var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); return metadata; } } 现在我想扩展ModelMetadata以及其他属性,填充这些属性并返回和ExtendedModelMetadata实例。 如何通过扩展实例中的base.CreateMetadata很好地传达分配给metadata实例的base.CreateMetadata ? 我想要但却没有的是; var metadata = (ExtendedModelMetadata)base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); 我可以为ExtendedModelMetadata创建一个构造函数,它接受一个ModelMetadata参数并显式地将它的所有属性分配给正在构造的实例,但我想要一个更通用且不太硬编码的方法。 我能做什么?