我知道这个问题已经被问了一下,从它的外观来看,这个问题没有明确的是或否答案,但是,我仍然对某些事情感到困惑.
通常在我编程时,我遵循一些关于前缀的规则:
我现在有一份新工作,我注意到代码中没有使用前缀.我问为什么,他们回答说IDE完成了跟踪成员变量是什么以及什么是局部变量的所有工作.现在我在想,可能是这样,但是使用前缀不是更容易吗?
我的意思是,如果我有一个成员,一个静态和一个名为"机器人"的局部变量,在编写方法时引用它是不是很麻烦?这可能是一个不切实际的例子,但我喜欢在我的头脑中设置一个良好的规则,即使是在不切实际的条件下,我也可以始终如一地应用.
这个例子是否适合使用匈牙利表示法?
我想我会制作一个优点/缺点列表并在我了解更多信息时对其进行编辑.
反对匈牙利人的论点:
Class.Robot 要么 Robot
this.robot
robot
不需要匈牙利人.
计数器:
仍然存在不一致性,机器人在不同的方法中可能意味着不同的东西.为了保持一致,你应该在每个Robot变量之前为Class或this(或没有)添加前缀.
最重要的是,假设你想要访问静态变量Strawberry,你怎么知道名为Strawberry的成员变量没有定义?也许它是在另一个你看不到的文件中定义的,所以你可能会得到意想不到的结果.现在您可能会说这是通过IDE可见的,但我认为使用前缀是优越的,因为您看到了您正在引用的内容,而您可能会错过IDE告诉您的内容.当然,您也可以使用此/ Classname前缀,但这种做法违背了不使用匈牙利表示法的目的.
反对匈牙利人的论点:
当在字段和变量的命名中使用匈牙利表示法时,会违反此规则.在C++代码中使用匈牙利表示法已经很普遍,但C#的趋势是为变量使用更长,更具描述性的名称,这些名称不是基于变量的类型,而是描述变量的用途.
计数器:
我提到的前缀不是基于变量的类型,前缀实际上指定了变量的用途.
反对匈牙利人的论点:
现代代码编辑器(如Visual Studio)可以轻松识别变量或字段的类型信息,通常是将鼠标光标悬停在变量名称上.这减少了对匈牙利表示法的需要.
计数器:
虽然这是真的,但除非发生错误,否则我自己几乎不会将鼠标悬停在变量名称上方.相反,使用匈牙利表示法,您可以立即看到变量在类中的位置.
备注:
Microsoft不推荐使用匈牙利表示法来表示文件名吗?我读到接口文件前缀为I是一种惯例,这是匈牙利表示法的一种形式.虽然这与我上面的问题没有直接关系,但它确实提出了有时建议使用匈牙利符号的观点.
目前,sql单元测试由5个部分组成:
- Pre-Initialise
- Pre-Test
- Test
- Post-Test
- Post-Cleanup
Run Code Online (Sandbox Code Playgroud)
对于我的一些测试,"预测试"部分是相同的,我必须多次复制粘贴预测试代码,代码重复是一个坏主意...所以我的问题是,如果有任何方法写预测试只在一个地方通过调用单元测试项目中的函数来运行它?
我当前的C#文件示例在我的测试用例后面:
[TestClass()]
public class SqlServerUnitTestAssignUserToAssignment : SqlDatabaseTestClass
{
private TransactionScope trans;
public SqlServerUnitTestAssignUserToAssignment()
{
InitializeComponent();
}
[TestInitialize()]
public void TestInitialize()
{
trans = new TransactionScope();
base.InitializeTest();
}
[TestCleanup()]
public void TestCleanup()
{
base.CleanupTest();
trans.Dispose();
}
// generated code below:
Designer support code
Additional test attributes
[TestMethod()]
public void core_AssignUserToAssignmentTest()...
private Sql DatabaseTestActions core_AssignUserToAssignmentTestData
}
Run Code Online (Sandbox Code Playgroud) 我有一个基本上只运行Main并退出的应用程序(Console应用程序,Visual Studio 2015),但如果我在main中设置断点,并查看线程,我会看到以下内容:
我看到这些线程来自不同的进程,它们为什么显示而不是其他?它们与我的C#程序有什么关系?在什么情况下知道这些线程的作用是否有用?
我几乎总是想检查是否ModelSate.IsValid在我进行回发时被调用。并且必须在每次回帖开始时进行检查违反了 DRY 原则,有没有办法让它自动检查?
例子:
[HttpPost("RegisterUser")]
[AllowAnonymous]
public async Task<IActionResult> RegisterUser([FromBody] UserRegisterViewModel vmodel)
{
if(!ModelState.IsValid) // This code is repeated at every postback
return ModelInvalidAction(); // Is there a way to avoid having to write it down?
// do other things
return StatusCode(201);
}
Run Code Online (Sandbox Code Playgroud) 我和我的一位同事讨论过.我们在工作中使用Linq到Sql,我在工作中有点新意,所以我问他为什么我们不使用Linq to Entities?他提出了一些论点,其中一个是"因为Linq to Entities比linq慢到Sql".我对此持怀疑态度,我知道Linq to Entities更复杂并且具有其他功能,但我不明白为什么它会变慢.
Linq对实体的影响是否较慢?对这样的论点有什么好的回应?
我有一段C#代码,我在其中使用goto语句.这是正确使用goto语句还是有更好的替代解决方案?
bool IsValid(TestObject aObject)
{
bool aRetVal = false;
if(condition here)
goto exit;
if(condition here)
goto exit;
if(condition here)
goto exit;
aRetVal = true;
exit:
return aRetVal;
}
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是因为我不希望在我的方法中有多个退出点.
我有以下程序:
public class Program
{
struct Foo
{
public int Bar;
public int Zoo;
}
public static void Main()
{
Foo a;
Foo b;
a.Bar = 5;
a.Zoo = 2;
b.Bar = 5;
a.Zoo = 2;
Foo c;
c.Bar = 3;
c.Zoo = 5;
var result = Interlocked.CompareExchange(ref a, b, c);
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做这个编译?
我试图将位于 body 标签中的 div 标签的背景颜色设置为整个屏幕,但我还没有找到满意的解决方案:
...
<body>
<div>
</div>
</body>
...
Run Code Online (Sandbox Code Playgroud)
如何从位于 body 中的 div 标签设置整个页面的背景颜色?
正在做
div {
background-color: green;
}
Run Code Online (Sandbox Code Playgroud)
不会将背景变成绿色。
c# ×5
.net ×2
coding-style ×1
css ×1
goto ×1
html ×1
linq ×1
linq-to-sql ×1
performance ×1
sql ×1
sql-server ×1
unit-testing ×1