相关疑难解决方法(0)

为什么用户名应该是不可改变的?

我到处读(并在实践中看到)用户名不应该是可更改的.当我问为什么时,'安全'是一个理由.

我一直在寻找一个明确的答案,为什么更改用户名是不安全的,但我似乎无法找到答案.

这里有经验丰富的安全人员可以回答这个问题吗?

注意:如果您不知道答案,请不要猜测.我自己想到了很多原因,但我不知道实际答案,因此问题.

更新:
1:通过userId我的意思是引用某种唯一标识符,无论是数据库记录ID还是其他一些唯一ID.我多次被告知,即使用户名不是系统本身的主要/唯一标识符,更改用户名也不利于安全性.

2:我允许用户更改他们的"公共名称".这是用于向其他(非特权)用户标识用户的名称.例如:

userId: 1234
username: john02
public name: John Jameson
email: j.jameson@dev.null

3:正如JasonThe Rook所指出,一致性似乎是唯一的好理由.我觉得这种"最佳实践"可能是过去某个地方的剩余部分,当用户名在系统中实际用于唯一识别用户时.

security

22
推荐指数
3
解决办法
1368
查看次数

演员与'as'运营商重访

我知道有几个帖子已经涉及演员和as运营商之间的区别.他们都大多重申相同的事实:

  • as运营商将不会抛出,但返回null如果转换失败
  • 因此,as运算符仅适用于引用类型
  • 所述as操作者将不使用用户定义的转换运算符

然后,答案倾向于无休止地讨论如何使用或不使用其中一个或每个的利弊,甚至是他们的表现(我根本不感兴趣).

但是这里还有更多工作要做.考虑:

static void MyGenericMethod<T>(T foo)
{
    var myBar1 = foo as Bar;  // compiles
    var myBar2 = (Bar)foo;    // does not compile ('Cannot cast expression of
                              // type 'T' to type 'Bar')
}
Run Code Online (Sandbox Code Playgroud)

请不要介意这个明显懊悔的例子是否是好的做法.我在这里关注的是两者之间非常有趣的差异,因为演员阵容不会编译,而不是as.我真的想知道是否有人可以对此有所了解.

正如人们常说的那样,as运营商忽视了用户定义的转换,但在上面的例子中,显然两者的能力更强.请注意,as就编译器而言,类型T和Bar之间(编译时未知)之间没有已知的连接.演员阵容完全是"运行时".我们是否应该怀疑演员阵容在编译时是全部还是部分解决而as操作员不是?

顺便说一下,添加类型约束毫不奇怪地修复了强制转换,因此:

static void MyGenericMethod<T>(T foo) where T : Bar
{
    var myBar1 = foo as Bar;  // compiles
    var myBar2 = (Bar)foo; …
Run Code Online (Sandbox Code Playgroud)

c# clr

21
推荐指数
2
解决办法
1975
查看次数

#region指令在.NET中真的有用吗?

在使用#region(在C#和VB.NET中)维护大量代码之后,在我看来,这个构造只是程序员的一堆"make work".将dang事物放入代码中是有用的,然后他们使搜索和阅读代码非常烦人.

有什么好处?为什么编码人员会把这个放在他们的代码中.

让我成为一个信徒!

.net coding-style

18
推荐指数
4
解决办法
6338
查看次数

如何在C#中禁用无参数构造函数

abstract class CAbstract
{
   private string mParam1;
   public CAbstract(string param1)
   {
      mParam1 = param1;
   }
}

class CBase : CAbstract
{
}
Run Code Online (Sandbox Code Playgroud)

对于类CBase,应该通过提供参数来初始化它,那么如何禁用CBase类的无参数构造函数?

.net c# inheritance constructor abstract-class

17
推荐指数
2
解决办法
6429
查看次数

返回默认值.(C#)

我正在创建自己的字典,但我无法实现TryGetValue函数.当找不到密钥时,我没有任何东西要分配给out参数,所以我保持原样.这会导致以下错误:"必须在控制离开当前方法之前将out参数'value'分配给"

所以,基本上,我需要一种方法来获取默认值(0,false或nullptr取决于类型).我的代码类似于以下内容:

class MyEmptyDictionary<K, V> : IDictionary<K, V>
{
    bool IDictionary<K, V>.TryGetValue (K key, out V value)
    {
        return false;
    }

    ....

}
Run Code Online (Sandbox Code Playgroud)

c# generics default-value

15
推荐指数
3
解决办法
2万
查看次数

C#培训测验

我已经编程了10年,主要是在vba和vb.net,但我知道c#足以编写我通常做的事情.我昨天申请了一个高级c#职位,我在感应测试中做得很差,这不好笑:)

我总是发现,对我而言,学习和回忆的最佳方式是通过问答(多选和简答).也就是说,提出了一个问题,在我回答之后,我会给出关于我是选择对错的原因以及原因.

因此,我想知道是否有人知道或可以推荐一个C#测验网站.有点像每日c#测验,以保持我的大脑最新和新鲜,如果我不总是编程.也不是什么懦弱的东西.能做到一切的东西.支付不是一个障碍,我更喜欢支付一个好的资源而不是捣蛋.

谢谢

c c#

15
推荐指数
2
解决办法
3万
查看次数

无拳击的通用解析方法

我正在尝试编写一个通用的Parse方法,该方法转换并返回NamedValueCollection中的强类型值.我尝试了两种方法,但这两种方法都通过装箱和拆箱来获得价值.有谁知道避免拳击的方法?如果你在生产中看到这个你会不喜欢它,它的性能有多糟糕?

Usuage:

var id = Request.QueryString.Parse<int>("id");
Run Code Online (Sandbox Code Playgroud)

尝试#1:

public static T Parse<T>(this NameValueCollection col, string key)
{
    string value = col[key];

    if (string.IsNullOrEmpty(value))
        return default(T);

    if (typeof(T) == typeof(int))
    {
        //return int.Parse(value); // cannot convert int to T
        //return (T)int.Parse(value); // cannot convert int to T
        return (T)(object)int.Parse(value); // works but boxes
    }
    if (typeof(T) == typeof(long))
    {
        return (T)(object)long.Parse(value); // works but boxes
    }
    ...

    return default(T);
}
Run Code Online (Sandbox Code Playgroud)

尝试#2(使用反射):

public static T Parse<T>(this NameValueCollection col, string key)
{
    string value …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection

13
推荐指数
3
解决办法
1万
查看次数

创建一个没有标准(Obj sender,EventArgs args)签名的事件处理程序委托有多么错误?

我理解使用标准MS事件处理程序委托签名的好处,因为它允许您轻松扩展通过事件传递的信息,而不会破坏任何基于旧委托签名的旧关系.

我想知道在实践中人们经常遵循这条规则吗?说我有一个像这样的简单事件

public event NameChangedHandler NameChanged;
public delegate void NameChangedHandler(Object sender, string oldName, string newName);
Run Code Online (Sandbox Code Playgroud)

这是一个简单的事件,我几乎肯定我从NameChanged事件中需要知道的唯一参数是名称已更改的对象,旧名称和新名称.那么创建一个单独的NameChangedEventArgs类是否值得,或者像这样的简单事件是否可以直接通过委托参数返回参数?

c# events eventargs

13
推荐指数
2
解决办法
4817
查看次数

C#中的高速字符串匹配

我有一个大约10,000个工作人员的列表,List<T>我有一个ListBox包含这些工作人员的子集,具体取决于文本框中的搜索词.

假设某个Staff对象具有以下公开公开的属性:

string FirstName
string LastName
string MiddleName
   int StaffID
   int CostCentre
Run Code Online (Sandbox Code Playgroud)

我可以写一个这样的函数:

bool staffMatchesSearch(Staff stf)
{
  if (tbSrch.Text.Trim() == string.Empty)
    return true; // No search = match always.

  string s = tbSrch.Text.Trim().ToLower();

  // Do the checks in the order most likely to return soonest:
  if (stf.LastName.ToLower().Contains(s))
    return true;
  if (stf.FirstName.ToLower().Contains(s))
    return true;
  if (stf.MiddleName.ToLower().Contains(s))
    return true;

  if (stf.CostCentre.ToString().Contains(s))
    return true; // Yes, we want partial matches on CostCentre
  if (stf.StaffID.ToString().Contains(s))
    return true; // …
Run Code Online (Sandbox Code Playgroud)

c# string search

13
推荐指数
1
解决办法
948
查看次数

Greasemonkey的隐藏功能

人们在他们的Greasemonkey脚本中使用了哪些鲜为人知但有用的功能和技术?

(请注意,每个答案只有一个功能.)

类似主题:

javascript greasemonkey

12
推荐指数
5
解决办法
3659
查看次数