我只是想将WebForms转换为MVC:
在.net MVC中,哪些概念使ViewState成为不需要的东西?
如果表格在iteself上回发等(即回发)?page/usercontrol如何保持其状态?
人们在维持某种状态而不采用会话状态方面有什么技巧?
当然,完全无国籍的环境不存在?
这个问题的代码让我思考
assert(value>0); //Precondition
if (value>0)
{
//Doit
}
Run Code Online (Sandbox Code Playgroud)
我从不写if语句.断言就足够/你可以做的一切."早点崩溃,经常崩溃"
CodeComplete说明:
我不认为您通过更正无效输入值或跳过代码使应用程序更加健壮:
assert(value >= 0 ); //Precondition
assert(value <= 90); //Precondition
if(value < 0) //Just in case
value = 0;
if (value > 90) //Just in case
value = 90;
//Doit
Run Code Online (Sandbox Code Playgroud)
这些更正是基于您对外部世界的假设.只有调用者知道你的函数的"有效输入值"是什么,并且他必须在调用你的函数之前检查它的有效性.
用CodeComplete来解释:" 当我们不依赖于断言时,真实世界的程序会变得太乱."
问题:我错了,顽固,愚蠢,太不防守......
我在C#中有一个"Status"类,使用如下:
Status MyFunction()
{
if(...) // something bad
return new Status(false, "Something went wrong")
else
return new Status(true, "OK");
}
Run Code Online (Sandbox Code Playgroud)
你明白了.MyFunction的所有调用者都应检查返回的状态:
Status myStatus = MyFunction();
if ( ! myStatus.IsOK() )
// handle it, show a message,...
Run Code Online (Sandbox Code Playgroud)
然而,懒惰的呼叫者可以忽略状态.
MyFunction(); // call function and ignore returned Status
Run Code Online (Sandbox Code Playgroud)
要么
{
Status myStatus = MyFunction();
} // lose all references to myStatus, without calling IsOK() on it
Run Code Online (Sandbox Code Playgroud)
有可能使这不可能吗?例如抛出异常
一般来说:是否可以编写一个C#类,您必须在其上调用某个函数?
在Status类的C++版本中,我可以在析构函数中对某些私有bool bIsChecked编写测试,并在有人不检查此实例时响铃.
C#中的等价选项是什么?我在某处读到"你不想在你的C#类中使用析构函数"
IDisposable接口的Dispose方法是一个选项吗?
在这种情况下,没有非托管资源可供免费使用.此外,GC 不会确定何时处置该对象.当它最终被处置时,是否仍然可以知道忽略该特定Status实例的位置和时间?"using"关键字确实有帮助,但同样,懒惰的调用者 …
海,
我尝试
从我在Bitbucket.org上的私人仓库中拉出
我
需要Windows身份验证的公司代理后面的
Windows机器上的本地仓库
.
Mercurial.ini
文件%USERPROFILE%
我将此部分添加到它(信息):
[http_proxy]
host = TheProxyServer
:TheProxyServerPort
user = MyWindowsLogin
passwd =MyWindowsPassword
这有效:
C:\ path\to\repo> hg pull
http授权所需域
:Bitbucket.org HTTP
用户:
在我输入Bitbucket的凭证后,我得到:
搜索更改
未找到任何更改
但是写下密码Mercurial.ini
显然是一个主要的安全问题(除了因为我们的密码策略而每个月都要更新这个文件).
是否有可能让Mercurial要求代理凭证?
或者以更安全的方式存储这些凭据?
编辑:
我尝试使用相同的设置和SSH,但我得到了这个:
C:\ path\to\repo> hg clone ssh://hg@bitbucket.org/ ME/repo/
running""C:\ Program Files\TortoiseHg\TortoisePlink.exe"-ssh -2 hg@bitbucket.org" hg -R ME/repo/serve --stdio"中止:远程hg没有合适的回复!
一个对话框: "PuTTY Fatal Error - Network error: Connection timed out"
EDIT2:
出现这个问题是因为Subversion正确处理了这种情况: …
我使用TortoiseHg来提交更改.提交对话框中显示的(默认)diff包含许多添加/删除.
但相比之下,当我点击提交对话框中的差异图标时,KDiff3打开并且该比较更加"智能":它检测到"更好"我改变的内容:我移动了一段代码,导致更少的添加/缺失.
由于Hg" ...存储了将旧版本转换为新版本所需的更改. ",我想知道是否可以利用KDiff3的"智能"将这些更改存储在Hg提交中?
另一个问题中提出的解决方案似乎不适用于TortoiseHg提交对话框.
提前致谢!
我想使用SharpSVN将目录下的所有未版本控制的文件添加到SVN.
我首先在命令行上尝试了常规的svn命令:
C:\temp\CheckoutDir> svn status -v
Run Code Online (Sandbox Code Playgroud)
我看到所有子目录,已经签入的所有文件,一些标有"?"的新文件,没有"L"锁定指示
C:\temp\CheckoutDir> svn add . --force
Run Code Online (Sandbox Code Playgroud)
这导致添加了已经在版本控制下的子目录中的所有新文件.
我想用SharpSVN做同样的事情.我将一些额外的文件复制到同一目录并运行此代码:
...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
SvnAddArgs saa = new SvnAddArgs();
saa.Force = true;
saa.Depth = SvnDepth.Infinity;
try
{
svn.Add(@"C:\temp\CheckoutDir\." , saa);
}
catch (SvnException exc)
{
Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
}
}
Run Code Online (Sandbox Code Playgroud)
但是引发了一个SvnException:
我的代码中没有运行其他svnclient实例,我也尝试过调用
svn.cleanup()
Run Code Online (Sandbox Code Playgroud)
就在Add之前,但无济于事.
由于文档相当模糊;),我想知道这里是否有人知道答案.
提前致谢!
一月
这个问题关系到这一个,但不完全一样,我认为.
鉴于:
class Foo
{
public string Bar { get; set; }
}
...
var c1 = new List<Foo>() { ... };
var c2 = new List<Foo>() { ... };
Run Code Online (Sandbox Code Playgroud)
以下2个循环给出相同的结果:
foreach (var item in c2.Where(f => c1.Any(f1 => f1.Bar.Equals(f.Bar))))
{ ... }
foreach (var item in c2.Where(f => c1.Select(f1 => f1.Bar).Contains(f.Bar)))
{ ... }
Run Code Online (Sandbox Code Playgroud)
它们同样快吗?
与另一个问题的区别在于,Select
这里的额外声明是否会改变底层集合的本质的重要性.
换句话说:这包含:
foos.Contains(foo1)
Run Code Online (Sandbox Code Playgroud)
采取与此相同的"收集"行为:
foos.Select(f=>f.Bar).Contains(foo1.Bar)
Run Code Online (Sandbox Code Playgroud)
我可能的想法可能是:"一旦我们落后于Linq的Select,一切都只是'Lists',所以Any和Contains都是O(n)."
我正在使用SqlCommand在SqlServer2005数据库上执行sql语句.(我也试过DbCommand.)
如果我在SQL Server Management Studio中执行此sql,我可以发送"结果到文本".我想在我的C#代码中捕获这个文本.
我的sql在print语句旁边还包含不同的select语句:
PRINT 'We are here'
SELECT Name FROM Table1
-- do some logic
SELECT Name, Country FROM Table1
PRINT 'We are done'
Run Code Online (Sandbox Code Playgroud)
(" Strange sql "我听到你说.我知道,但这就是我们长期维护脚本的样子.)
我可以使用SqlConnection.InfoMessage单独捕获PRINT语句.
但是SqlDataReader似乎不支持2个select语句,两者都使用不同的FieldCount.
我担心我会遇到Process.Start和sql server命令行sqlcmd并读取输出,但我正在寻找更多的API'ish.
提前致谢!
我们正在使用MS Visual Studio 2008.
TFS似乎考虑了文件或其他东西的创建日期,以确定是否应该提交文件.
是否可以仅对文件名和内容进行TFS测试?
虽然名称和内容已经改变.
我们的具体用例:
我们每晚运行一个生成xml文件的脚本(覆盖现有文件)并提交它们.我们只想提交实际改变的那些以保持历史清洁.
提前致谢!
一月
c# ×5
diff ×2
mercurial ×2
svn ×2
asp.net-mvc ×1
bitbucket ×1
commit ×1
destructor ×1
dispose ×1
kdiff3 ×1
linq ×1
performance ×1
proxy ×1
sharpsvn ×1
text ×1
tfs ×1
tortoisehg ×1
viewstate ×1