当前的项目:
我的剃刀代码:
@if(Session["Type"]?.ToString() == "Insurance") {
<text>policy of insurance</text>
} else if(Session["Type"]?.ToString() == "Warranty") {
<text>policy of warranty</text>
} else {
<text>protection policy</text>
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 明确地将此标记为错误,
功能“空传播运算符”在 C# 5 中不可用。请使用语言版本 6 或更高版本。
和Visual Studio是明确使用C#6:
当我尝试运行页面本身时,出现错误:
CS1525:无效的表达式术语“.”
这表明它明确地在问号后面的句点之后。
这个项目明确作为一个 C# 6 项目开始,我很困惑为什么它重新回到 C#5。
另一个奇怪的问题:这在调试和我的本地测试设置中都运行得很好(我发布到文件系统,使用本地 IIS …
我有一个键,但该键的值不同.我尝试过HashTable,但我认为这不是正确的做法.
我将详细解释要求是什么:
我有一把钥匙 - "Asp.net" - 为此我有n个值 - 61,67,100
所以我必须将它存储在像Dictionary或hash表这样的地方.
我有一个解决方案,包括许多类库项目和一个Windows服务项目.当我打开Windows服务项目的项目设置并(意外地)单击"服务"选项卡时,Visual Studio会坚持自动勾选"启用客户端应用程序服务"复选框.
这样做的结果是它将添加对System.Web.Extensions的引用,并在app.config中插入一些部分.再次禁用该复选框不会删除引用.但是它会删除生成的配置,但它也会删除之前存在的一些不相关的配置.
为什么它坚持勾选这个复选框,我可以让它不这样做吗?"设置"选项卡的帮助文档未提及任何"自动选择"行为.
这是Visual Studio 2010,目标是.Net 3.5.
至少有一个人有同样的问题,遗憾的是没有提供任何解决方案:http: //go4answers.webhost4life.com/Example/visual-studio-2010-keeps-enabling-7689.aspx
这反过来又链接到Microsoft Connect问题,但由于某些原因,它们似乎不允许访问旧版报告:https://connect.microsoft.com/VisualStudio/feedback/details/570166
给定一个标识非泛型类的开放泛型方法的MethodInfo实例,请考虑以下伪代码:
class Foo { void FooMethod<T>() {} }
public static void PrintMethodInfo(RuntimeMethodHandle methodHandle)
{
var mi = (MethodInfo) MethodBase.GetMethodFromHandle(methodHandle);
Console.WriteLine("Method: "+mi.ToString());
}
var methodInfo = typeof(Foo).GetMethod("FooMethod");
Run Code Online (Sandbox Code Playgroud)
生成一个方法"void GeneratedMethod <T>()",在主体中包含此代码:
IL.Emit(OpCodes.Ldtoken, methodInfo);
IL.Emit(OpCodes.Call, methodInfoPrintMethodInfo);
Run Code Online (Sandbox Code Playgroud)
调用GeneratedMethod <int>(),.Net 3.5上的输出将是:
Method: System.Object Method[Int32]()
Run Code Online (Sandbox Code Playgroud)
在.Net 4.0上,它将是:
Method: System.Object Method[T]()
Run Code Online (Sandbox Code Playgroud)
因此,在.Net 2.0/3.5中,ldtoken生成的IL似乎将包含一个元数据标记,该标识符标识通用FooMethod <>实例化,该类型参数在调用GeneratedMethod <T>时给出.
但是,在.Net 4.0中,ldtoken将包含标识开放泛型类型的元数据.
我很难找到支持.Net 3.5案例中发生的事情的文档(事实上,如果生成的方法本身不是通用的,它应该完全失败) - .Net 4的行为似乎更合乎逻辑.我也找不到任何关于这种变化的文件.这是现在修复的早期版本中的错误吗?
我的主视图模型有一个ChildViewModel的集合.在视图中,我遍历集合并调用EditorFor(),如下所示:
@for (int i = 0; i < Model.Children.Count; i++)
{
@Html.EditorFor(m => m.Child[i]);
}
Run Code Online (Sandbox Code Playgroud)
编辑器模板如下所示:
@model ChildModel
@using (Html.BeginForm("EditChild", "MyController"))
{
@Html.HiddenFor(m => m.ChildId)
@Html.TextBoxFor(m => m.ChildName)
}
Run Code Online (Sandbox Code Playgroud)
这将生成标记,其中每个子项都是单独的形式,并且每个这样的表单将具有名为Child [0] .ChildName的输入控件.我为每个孩子使用单独的表单,因为孩子们将在每行显示一个,然后用户可以编辑并提交单行.
我的表单操作方法是:
[HttpPost]
public ActionResult EditChild(ChildViewModel form) { }
Run Code Online (Sandbox Code Playgroud)
问题是,当调用它时,模型的所有属性都将为null,因为模型绑定器不知道前缀.在某些情况下,我们可以使用BindAttribute告诉模型绑定器有关前缀的信息,但在这种情况下,前缀不是常量:它将是Child [0],Child [1]等.
总之,我们希望为集合的每一行重复相同的表单,然后允许用户POST一个表单.在这种情况下,Web如何处理id,名称,前缀和模型绑定?
多年以来,我们大多数时候都使用通用集合.有时我们确实需要任何东西的集合(好吧,通常只有几个不同的东西,但没有共同的基类).对于这种情况,我们可以使用或者IList泛型IList<object>作为方法参数和属性的类型.
有什么理由比较喜欢一个吗?性能特点?
就个人而言,我倾向于IList<object>,因为我认为这更清楚地表明我们确实接受了"任何事情".当输入参数时,IList我们无法立即判断此方法是否接受任何内容,或者缺少泛型是由于历史记录还是草率编码.
我正在尝试根据我返回的数据库值计算销售和费用的差异.但是当我使用a - b它时会抛出以下错误.虽然我正在转换双倍但它仍然给出错误:
cannot implicitly convert type string to double
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
double a = Double.Parse(reader["sales"].ToString().Trim());
double b = Double.Parse(reader["expenses"].ToString().Trim());
Label11.Text = a - b;
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
c# ×3
asp.net ×2
asp.net-mvc ×2
.net ×1
.net-4.0 ×1
c#-6.0 ×1
generics ×1
razor ×1
reflection ×1