如果我希望表单中的一组输入绑定到List
MVC 4中,我知道以下input
name
属性的命名约定将起作用:
<input name="[0].Id" type="text" />
<input name="[1].Id" type="text" />
<input name="[2].Id" type="text" />
Run Code Online (Sandbox Code Playgroud)
但我很好奇模型粘合剂是多么宽容.例如,以下内容如何:
<input name="[0].Id" type="text" />
<input name="[3].Id" type="text" />
<input name="[8].Id" type="text" />
Run Code Online (Sandbox Code Playgroud)
模型绑定器如何处理这个?它会List
与null 结合长度为9吗?或者它仍然会绑定到List
3的长度?还是会完全窒息?
为什么我在乎
我想实现一个动态表单,用户可以在其中向表单添加行,也可以从表单中删除行.因此,如果我用户从总共8行中删除第2行,我想知道是否需要重新编号所有后续输入.
可能重复:
C#中的重入锁定
如果我写这样的代码:
class Program {
static void Main(string[] args) {
Foo();
Console.ReadLine();
}
static void Foo() {
lock(_lock) {
Console.WriteLine("Foo");
Bar();
}
}
static void Bar() {
lock(_lock) {
Console.WriteLine("Bar");
}
}
private static readonly object _lock = new object();
}
Run Code Online (Sandbox Code Playgroud)
我得到输出:
Foo
Bar
Run Code Online (Sandbox Code Playgroud)
我预计这会陷入僵局,因为Foo获得了一个锁,然后等待Bar获得锁.但这不会发生.
锁定机制是否只允许这个,因为代码是在同一个线程上执行的?
是否有系统的方法来了解C#中的操作是否是原子操作?或者是否有任何一般指导方针或经验法则?
我正在使用一个从SVN存储库到Git存储库的单向转换git svn clone
.大多数示例使用--no-metadata
标志执行此操作- 使用此标志是否有优势?
据我所知,该标志删除了SVN修订号.我可以想一想为什么保持这些可能有用的原因(例如回顾bug跟踪软件中提到的特定提交).
使用旗帜的理由是什么--no-metadata
?除了打破所有关系的感觉之外还有什么好处吗?
根据这本在线书籍,volatile
C#中的关键字不能防止重新排序Write操作,然后是Read操作.它给出了这样的例子,其中两个a
和b
可最终被设置为0
,尽管x
和y
是volatile
:
class IfYouThinkYouUnderstandVolatile
{
volatile int x, y;
void Test1() // Executed on one thread
{
x = 1; // Volatile write (release-fence)
int a = y; // Volatile read (acquire-fence)
...
}
void Test2() // Executed on another thread
{
y = 1; // Volatile write (release-fence)
int b = x; // Volatile read (acquire-fence)
...
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎符合10.5.3规范中的内容:
读取volatile字段称为volatile读取.易失性读取具有"获取语义"; 也就是说,保证在指令序列之后发生的任何内存引用之前发生.
写入易失性字段称为易失性写入.易失性写入具有"释放语义"; 也就是说,保证在指令序列中的写指令之前的任何存储器引用之后发生. …
我正在考虑将一个基于浏览器的大型代码库移到CommonJS(它是一个用TypeScript编写的AngularJS 1.x应用程序).该应用程序具有循环依赖性,因此我认为RequireJS是不可能的.
Browserify如何处理循环依赖?是否存在不同类型的循环依赖关系?或者使用CommonJS/Browserify处理循环依赖的任何提示?
有没有办法让原始实体本身ChangeTracker
(而不仅仅是原始值)?
如果State
是Modified
,那么我想我可以这样做:
// Get the DbEntityEntry from the DbContext.ChangeTracker...
// Store the current values
var currentValues = entry.CurrentValues.Clone();
// Set to the original values
entry.CurrentValues.SetValues(entry.OriginalValues.Clone());
// Now we have the original entity
Foo entity = (Foo)entry.Entity;
// Do something with it...
// Restore the current values
entry.CurrentValues.SetValues(currentValues);
Run Code Online (Sandbox Code Playgroud)
但这似乎不太好,而且我确定它有问题,我不知道......有更好的方法吗?
我正在使用Entity Framework 6.
在使用Code First时,EntityFramework到底映射具有自定义getter和setter的属性到底是做什么的?
是否只是在序列化时调用属性的getter,在反序列化时调用setter?所以我可以做一些傻事......
public class Foo {
public DateTime TimeAccessed {
get {
return DateTime.Now;
}
set {
TimeDeserialized = DateTime.Now;
}
}
[NotMapped]
public DateTime TimeDeserialized { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
注意我对使用上述代码或类似内容没有实际兴趣...它仅用于说明目的.
此外,在使用Code First映射属性时,是否需要执行所有getter和setter public
?