我的任务是编写我们部门的C#编程标准(包括指南).我应该包括哪些标准/指南?我已经从网络上的各种标准中获取了一些内容(以及Code Complete中的各个部分),但我希望听到该领域的开发人员的意见.
我已经有了:命名约定 - 通用/变量/类/方法/接口/控件
一般编程实践 - 文档(评论等),[WIP]
面向对象编程实践 - 封装,[WIP]
还有什么有用的?我不应该包括什么?
如何使用QueryOver重写此SQL?我不确定QueryOver的连接优先级和解决方案是如何工作的.
SELECT DISTINCT T1.*
FROM T1
LEFT JOIN T2
JOIN T3
ON T2.T3Key = T3.PrimaryKey
ON T1.PrimaryKey = T2.T1Key
LEFT JOIN T4
JOIN T5
ON T4.T5Key = T5.PrimaryKey
ON T1.PrimaryKey = T4.T1Key
WHERE T3.Criteria = @Criteria
OR T5.Criteria = @Criteria
Run Code Online (Sandbox Code Playgroud)
我们系统中的典型存储过程接受大约20个左右的参数.也没有机会重构这些存储过程.我基本上已经编写了自己的代码生成器,将这些SP包装到(数据库提供程序不可知)"Command"对象中,其公共属性对应于SP参数.它有效,但我更喜欢第三方经过试验和测试的解决方案.
谁能推荐任何东西?我还没有找到支持OleDB和存储过程的程序.
编辑:我需要OleDb连接,因为SQL 6.5(信不信由你).ADO.NET无法连接到SQL 6.5.此外,这是一个.NET 2.0应用程序,所以LinqToSql对我没用.
Edit2:我已经尝试过nHibernate和iBatis.它们都不符合我的需要.我最后一次尝试nHibernate时,它要求SP返回一个结果集.我的SP不是这种情况.它们都需要我手动指定参数.
我可以想到几种方法,例如.
Convert.ToInt32(floatingPoint) - floatingPoint == 0;
Math.Truncate(floatingPoint) - floatingPoint == 0;
floatingPoint % 1 == 0;
Math.Floor(floatingPoint) == floatingPoint;
//etc...
Run Code Online (Sandbox Code Playgroud)
但哪种方法最可靠?
我有这个问题:
SELECT PICTURE FROM LOGO WHERE LOGONO = ?
Run Code Online (Sandbox Code Playgroud)
("PICTURE"是SQL Server中的Image列)
而这段代码用于读取数据:
using (DbDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
if (!reader.IsDBNull(0))
{
byte[] buffer = new byte[8000];
while (reader.GetBytes(0, 0, buffer, 0, 8000) > 0)
picture.AddRange(buffer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当列包含null时,始终会在reader.IsDBNull(0)语句上抛出InvalidOperationException("行/列不存在数据").
MSDN说:
在调用类型化的get方法(例如,GetByte,GetChar等)之前调用此方法以查看是否存在空列值,以避免引发错误.
如何在不触发异常的情况下检查列是否包含null?我是以错误的方式解决这个问题吗?
我需要从C#应用程序中访问命令行.如果我使用"args"参数,我找不到检测不匹配的双引号的方法.
我正在处理的应用程序可以选择加密通过命令行传递给它的字符串.
例如.
program.exe -encrypt somestring
Run Code Online (Sandbox Code Playgroud)
结果是:
EZs/6rWxvJ82+VE8unJ0Xw==
Run Code Online (Sandbox Code Playgroud)
现在,如果用户输入:
program.exe -encrypt somestring extra characters
Run Code Online (Sandbox Code Playgroud)
它会忽略"somestring"之后的所有内容(您仍然可以通过"args"参数访问其余值).
您可以使用双引号轻松解决此问题:
program.exe -encrypt "somestring extra characters"
Run Code Online (Sandbox Code Playgroud)
当然,如果您想使用嵌入式引号,可以使用"\"来转义它们:
program.exe -encrypt "somestring \"extra\" characters"
Run Code Online (Sandbox Code Playgroud)
当用户输入如下内容时会发生此问题:
program.exe -encrypt "somestring extra characters
Run Code Online (Sandbox Code Playgroud)
要么:
program.exe -encrypt somestring ex"tra characters
Run Code Online (Sandbox Code Playgroud)
该程序将完全忽略双引号,这不是用户期望的.我想检测这样的情况并告知用户不匹配/未转义的报价,否则他们可能最终得到错误字符串的加密版本.
我是Redux的新手,立刻引起我注意的是Reducers打开了类型.
以下是Vanilla Counter示例的摘录:
function counter(state, action) {
if (typeof state === 'undefined') {
return 0
}
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
// details omitted
document.getElementById('increment')
.addEventListener('click', function () {
store.dispatch({ type: 'INCREMENT' })
})
document.getElementById('decrement')
.addEventListener('click', function () {
store.dispatch({ type: 'DECREMENT' })
})
Run Code Online (Sandbox Code Playgroud)
为什么不使用这样的东西呢?
function increment(state) { return state + 1; }
function decrement(state) { return state - 1; }
function counter(state, …Run Code Online (Sandbox Code Playgroud) 在 C# 中你可以这样做
public class Foo
{
public string Name { get; private set; }
public Foo(string name)
{
Name = name;
}
}
public static void Main()
{
var foo = new Foo("Foo Object");
Console.WriteLine(foo.Name);
// Will not compile
// foo.Name = "Bar Object";
}
Run Code Online (Sandbox Code Playgroud)
你能在 Nim 中做同样的事情(或具有预期效果的事情)吗?
c# ×4
.net ×1
blob ×1
coding-style ×1
command-line ×1
image ×1
immutability ×1
isinteger ×1
javascript ×1
join ×1
nhibernate ×1
nim-lang ×1
oledb ×1
orm ×1
queryover ×1
redux ×1