你怎么能用enum
C#枚举一下?
例如,以下代码无法编译:
public enum Suit
{
Spades,
Hearts,
Clubs,
Diamonds
}
public void EnumerateAllSuitsDemoMethod()
{
foreach (Suit suit in Suit)
{
DoSomething(suit);
}
}
Run Code Online (Sandbox Code Playgroud)
并给出以下编译时错误:
'Suit'是'type',但用作'变量'
Suit
关键字失败,第二个关键字失败.
我将使用一个具体的,但假设的例子.
每个订单通常只有一个订单项:
命令:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Run Code Online (Sandbox Code Playgroud)
了LineItem:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Run Code Online (Sandbox Code Playgroud)
但偶尔会有一个包含两个订单项的订单:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Run Code Online (Sandbox Code Playgroud)
通常在向用户显示订单时:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Run Code Online (Sandbox Code Playgroud)
我想在订单上显示单个项目.但是,由于此偶尔包含两个(或更多)商品的订单,订单将显示为重复:
OrderNumber Quantity Description
=========== ======== ==================== …
Run Code Online (Sandbox Code Playgroud) 我备份了一个数据库:
BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing
Run Code Online (Sandbox Code Playgroud)
然后尝试恢复它:
RESTORE DATABASE MyDatabase
FROM DISK = 'MyDatabase.bak'
WITH REPLACE --force restore over specified database
Run Code Online (Sandbox Code Playgroud)
现在数据库仍处于恢复状态.
有些人认为这是因为备份中没有日志文件,需要使用以下方式前滚:
RESTORE DATABASE MyDatabase
WITH RECOVERY
Run Code Online (Sandbox Code Playgroud)
当然,除此之外,失败:
Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)
确切地说,在灾难性的情况下你想要的是一种无法恢复的恢复.
备份包含数据和日志文件:
RESTORE FILELISTONLY
FROM DISK = 'MyDatabase.bak'
Logical Name PhysicalName
============= =============== …
Run Code Online (Sandbox Code Playgroud) Server.Transfer
和之间有什么区别Response.Redirect
?
查询运行速度很快:
DECLARE @SessionGUID uniqueidentifier
SET @SessionGUID = 'BCBA333C-B6A1-4155-9833-C495F22EA908'
SELECT *
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
Run Code Online (Sandbox Code Playgroud)
子树成本:0.502
但是将相同的SQL放在存储过程中运行速度很慢,并且执行计划完全不同
CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
SELECT *
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
EXECUTE ViewOpener @SessionGUID
Run Code Online (Sandbox Code Playgroud)
子树成本:19.2
我跑了
sp_recompile ViewOpener
Run Code Online (Sandbox Code Playgroud)
它仍然运行相同(严重),我也已将存储过程更改为
CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
SELECT *, 'recompile please'
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
Run Code Online (Sandbox Code Playgroud)
然后再回来,试图真正欺骗它重新编译.
我已经删除并重新创建存储过程以使其生成新计划.
我尝试使用一个诱饵变量强制重新编译,并防止参数嗅探:
CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
DECLARE …
Run Code Online (Sandbox Code Playgroud) 想象一下具有许多构造函数和虚方法的基类
public class Foo
{
...
public Foo() {...}
public Foo(int i) {...}
...
public virtual void SomethingElse() {...}
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个覆盖虚方法的后代类:
public class Bar : Foo
{
public override void SomethingElse() {...}
}
Run Code Online (Sandbox Code Playgroud)
而另一个后代做了更多的东西:
public class Bah : Bar
{
public void DoMoreStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)
我是否真的必须将所有构造函数从Foo复制到Bar和Bah?然后,如果我在Foo中更改构造函数签名,我是否必须在Bar和Bah中更新它?
有没有办法继承构造函数?有没有办法鼓励代码重用?
我想尝试将字符串转换为Guid,但我不想依赖捕获异常(
换句话说代码:
public static Boolean TryStrToGuid(String s, out Guid value)
{
try
{
value = new Guid(s);
return true;
}
catch (FormatException)
{
value = Guid.Empty;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
不适合.
我会尝试使用RegEx,但由于guid可以括号括起来,括号包裹,没有包装,使其变得困难.
另外,我认为某些Guid值无效(?)
更新1
ChristianK有一个好主意只能抓住FormatException
,而不是全部.更改了问题的代码示例以包含建议.
更新2
为什么要担心引发异常?我真的经常期待无效的GUID吗?
答案是肯定的.这就是为什么我使用TryStrToGuid -我很期待坏数据.
示例1 可以通过将GUID附加到文件夹名称来指定名称空间扩展.我可能正在解析文件夹名称,检查最终后是否有文本.是一个GUID.
c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
Run Code Online (Sandbox Code Playgroud)
示例2我可能正在运行一个使用频繁的Web服务器,想要检查一些发布的数据的有效性.我不希望无效数据占用比需要高2-3个数量级的资源.
示例3我可能正在解析用户输入的搜索表达式.
如果他们输入GUID,我想特别处理它们(例如专门搜索该对象,或在响应文本中突出显示并格式化该特定搜索词.)
更新3 - 性能基准
测试转换10,000个好Guids和10,000个坏Guids.
Catch FormatException: …
Run Code Online (Sandbox Code Playgroud) 我希望Visual Studio在发生处理异常时中断(即我不只是想看到"第一次机会"消息,我想调试实际异常).
例如,我希望调试器在异常处中断:
try
{
System.IO.File.Delete(someFilename);
}
catch (Exception)
{
//we really don't care at runtime if the file couldn't be deleted
}
Run Code Online (Sandbox Code Playgroud)
我遇到了Visual Studio.NET的这些笔记:
1)在VS.NET中进入Debug菜单>>"Exceptions ...">>"Common Language Runtime Exceptions">>"System"并选择"System.NullReferenceException"
2)在该对话框的底部有一个"当抛出异常时:"组框,选择"进入调试器"
3)运行您的方案.抛出异常时,调试器将停止并通过一个对话框通知您,类似于:"抛出类型"System.NullReferenceException"的异常.[Break] [Continue]"
点击[休息].这将使您处于导致问题的代码行.
但它们不适用于Visual Studio 2005(" 调试"菜单上没有" 例外"选项).
有谁知道在Visual Studio中找到这个选项对话框中的" 当抛出异常时 "组框,并选择" 进入调试器 "?
更新:问题是我的调试菜单没有Exceptions项.我自定义菜单以手动添加它.
一些HTML 1结束标记是可选的,即:
</HTML>
</HEAD>
</BODY>
</P>
</DT>
</DD>
</LI>
</OPTION>
</THEAD>
</TH>
</TBODY>
</TR>
</TD>
</TFOOT>
</COLGROUP>
Run Code Online (Sandbox Code Playgroud)
注意:不要与禁止包含的结束标记混淆,即:
</IMG>
</INPUT>
</BR>
</HR>
</FRAME>
</AREA>
</BASE>
</BASEFONT>
</COL>
</ISINDEX>
</LINK>
</META>
</PARAM>
Run Code Online (Sandbox Code Playgroud)
注意: xhtml
与HTML不同.xhtml是xml的一种形式,它要求每个元素都有一个结束标记.可以在html中禁止结束标记,但必须使用xhtml
.
是可选的结束标记
换句话说,应该我包括他们,或者我应该不包括它们呢?
该如何关闭元素标签是可选的HTML 4.01规范的会谈,但如果它是最好将它们纳入,或最好不包括他们不说.
另一方面,关于DevGuru的随机文章说:
结束标记是可选的.但是,建议将其包括在内.
我问的原因是因为你只是因为兼容性原因而知道它是可选的; 如果可以的话,他们会做出(强制性的 | 禁止的).
换句话说:HTML 1,2,3对这些,现在是可选的结束标记做了什么.HTML 5有什么作用?什么应该 …
.NET框架附带了6种不同的散列算法:
每个功能都有不同的表现; MD5是最快的,RIPEMD是最慢的.
MD5的优势在于它适用于内置的Guid类型; 它是3型UUID的基础.SHA-1哈希是类型5 UUID的基础.这使得它们非常易于识别.
然而,MD5易受碰撞攻击,SHA-1也容易受到攻击,但程度较轻.
我真的很想回答的具体问题是:
MD5不值得信任吗?在正常情况下,当您使用没有恶意意图的MD5算法且没有任何第三方有任何恶意意图时,您会期望任何冲突(意味着两个任意byte []产生相同的哈希)
RIPEMD比SHA1好多少?(如果它更好)它的计算速度要慢5倍,但散列大小与SHA1相同.
散列文件名(或其他短字符串)时获得非恶意冲突的几率是多少?(例如,2个具有相同MD5哈希值的随机文件名)(使用MD5/SHA1/SHA2xx)一般来说,非恶意冲突的几率是多少?
这是我使用的基准:
static void TimeAction(string description, int iterations, Action func) {
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
static byte[] GetRandomBytes(int count) {
var bytes = new byte[count];
(new Random()).NextBytes(bytes);
return bytes;
}
static void …
Run Code Online (Sandbox Code Playgroud) c# ×4
sql-server ×3
.net ×2
asp.net ×1
backup ×1
constructor ×1
cryptographic-hash-function ×1
cryptography ×1
debugging ×1
enumeration ×1
enums ×1
exception ×1
guid ×1
hash ×1
html ×1
html4 ×1
html5 ×1
inheritance ×1
loops ×1
parsing ×1
performance ×1
redirect ×1
restore ×1
sql ×1
string ×1
t-sql ×1