问题:有更好的方法吗?
VB.Net
Function GuidToBase64(ByVal guid As Guid) As String
Return Convert.ToBase64String(guid.ToByteArray).Replace("/", "-").Replace("+", "_").Replace("=", "")
End Function
Function Base64ToGuid(ByVal base64 As String) As Guid
Dim guid As Guid
base64 = base64.Replace("-", "/").Replace("_", "+") & "=="
Try
guid = New Guid(Convert.FromBase64String(base64))
Catch ex As Exception
Throw New Exception("Bad Base64 conversion to GUID", ex)
End Try
Return guid
End Function
Run Code Online (Sandbox Code Playgroud)
C#
public string GuidToBase64(Guid guid)
{
return Convert.ToBase64String(guid.ToByteArray()).Replace("/", "-").Replace("+", "_").Replace("=", "");
}
public Guid Base64ToGuid(string base64)
{
Guid guid = default(Guid);
base64 = …Run Code Online (Sandbox Code Playgroud) 是什么ElapsedTicks以及Elapsed.Ticks在秒表类是什么意思?什么意思可能与预期不同?
如果您在C#和VB.NET中创建新项目,则直接进入立即窗口并键入:
? 567 / 1000
Run Code Online (Sandbox Code Playgroud)
C#将返回0,而VB.NET将返回0.567.
要在C#中获得相同的结果,您需要输入
? 567 / 1000.0
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种差异?为什么C#在1000之后需要显式小数点?
更新了更新的答案和更好的测试
假设我的号码是382,即101111110.
我怎么能随机将一个不是0的位转到0?
为什么;
既然人们问我原因,我只需要这样做,从整数中删除一点.
基于这里的答案是结果(工作一)
我跑了这个
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static Random random;
static void Main(string[] args)
{
Stopwatch sw;
int[] test = new int[10] { 382, 256, 1, 257, 999, 555, 412, 341, 682, 951 };
random = new Random(42);
for (int j = 0; j < 10; j++)
{
sw = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
Perturb(test[j]);
sw.Stop();
Console.WriteLine("Perturb " …Run Code Online (Sandbox Code Playgroud) 如果数据库中的表格如下:
userid uniqueidentifier
username varchar(20)
password varbinary(max)
Run Code Online (Sandbox Code Playgroud)
当用户提交(注册)时,我将用户/传递发送到存储过程.
存储过程创建一个新的GUID(使用NEWID())然后我使用SQL Server 的HashBytes(sha1)函数根据提供的GUID +密码创建密码然后我将值插入上面的表.
当用户提交(登录)时,我将用户/传递发送到存储过程.
存储过程查找用户名并获取用户ID以将guid +密码的hashbyte(sha1)与密码字段进行比较.
你看到那个逻辑中有任何缺陷吗?
似乎有很多不同的数据访问策略来自微软.有'经典'ADO.NET,Linq2Sql,ADO.NET实体框架,ADO.NET数据服务,ADO.NET动态数据.我确定我错过了一些.对我来说,似乎存在很多关于每个框架适合应用程序架构的混淆.微软试图用所有这些数据访问方法解决什么问题?
我有两个表,每个表有大约200,000行.我已经运行了下面的查询,运行一个多小时后仍然没有完成.对此有什么解释?
SELECT
dbo.[new].[colom1],
dbo.[new].[colom2],
dbo.[new].[colom3],
dbo.[new].[colom4],
dbo.[new].[Value] as 'nieuwe Value',
dbo.[old].[Value] as 'oude Value'
FROM dbo.[new]
JOIN dbo.[old]
ON dbo.[new].[colom1] = dbo.[old].[colom1]
and dbo.[new].[colom2] = dbo.[old].[colom2]
and dbo.[new].[colom3] = dbo.[old].[colom3]
and dbo.[new].[colom4] = dbo.[old].[colom4]
where dbo.[new].[Value] <> dbo.[old].[Value]
Run Code Online (Sandbox Code Playgroud)
来自评论;
rowversion(时间戳)数据类型的正确类型是什么?
我知道它是8个字节,但我找不到MSDN中的链接,它告诉它是有符号还是无符号长.
我应该使用哪些代码,甚至重要吗?
byte[] SqlTimeStamp;
long longConversion;
longConversion = BitConverter.ToInt64(SqlTimeStamp,0);
TimeStamp = BitConverter.GetBytes(longConversion);
ulong ulongConversion;
ulongConversion = BitConverter.ToUInt64(SqlTimeStamp,0);
TimeStamp = BitConverter.GetBytes(ulongConversion);
Run Code Online (Sandbox Code Playgroud) 使用.net下的enum,你可以使用的最大数字是ULong.
这意味着最多64个标志.
当你需要超过64个标志时,会有什么选择?
编辑
对不起,我忘了添加这个,替代方案仍然可以使用按位操作 至少这一个; 和和或.
使用Josh Einstein的建议,我想出了这个,它有意义吗?
class bitArrayFlag
{
private const int flagSize = 255; //allow X numbers of flags
public BitArray flag1;
public BitArray flag2;
public BitArray flagN;
public bitArrayFlag()
{
int flagPos = 0;
bool[] flagBit = new bool[flagSize];
flagBit[flagPos] = true;
flag1 = new BitArray(flagBit);
flagBit[flagPos] = false;
flagPos += 1;
flagBit[flagPos] = true;
flag2 = new BitArray(flagBit);
//...
//...
//...
flagBit[flagPos] = false;
flagPos += …Run Code Online (Sandbox Code Playgroud) 我有一个datacontact,其中有许多成员都有自定义类
如果在反序列化时属性为null,我想强制一个新实例.
有没有办法做到这一点?
c# ×5
.net ×4
vb.net ×3
guid ×2
sql-server ×2
ado.net ×1
base64 ×1
datacontract ×1
hash ×1
linq-to-sql ×1
performance ×1
rowversion ×1
salt ×1
sql ×1
ssms ×1
stopwatch ×1
wcf ×1