在C#中是否有一种方法可以查看字符串是否为Base 64编码,而不仅仅是尝试转换它并查看是否存在错误?我有这样的代码:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Run Code Online (Sandbox Code Playgroud)
我想避免如果该值不是有效的base 64字符串,则会出现"Base-64字符串中的无效字符"异常.我想检查并返回false而不是处理异常,因为我希望有时这个值不会是一个基本的64字符串.在使用Convert.FromBase64String函数之前有没有办法检查?
谢谢!
更新:
感谢您的所有答案.这是一个你可以使用的扩展方法到目前为止似乎确保你的字符串将传递Convert.FromBase64String而没有异常.当转换为base 64时,.NET似乎忽略所有尾随和结尾空格,因此"1234"有效,因此"1234"
public static bool IsBase64String(this string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
}
Run Code Online (Sandbox Code Playgroud)
对于那些对测试性能与捕获和异常感到疑惑的人来说,在大多数情况下对于这个基础64事物来说,检查比捕获异常直到达到一定长度更快.它的长度越小越快
在我非常不科学的测试中:对于字符长度100,000 - 110000的10000次迭代,它首先测试快了2.7倍.
对于字符长度为1至16个字符的1000次迭代,总共16,000次测试,它的速度提高了10.9倍.
我确信有一点可以用基于异常的方法进行测试.我只是不知道那是什么意思.
我环顾四周,但我无法弄清楚这一点,有些语言是从右到左阅读和书写,而不是从左到右.能够以某种方式从CultureInfo对象获取文本方向似乎是明智的,但我还没有在任何地方看到它.我错过了什么吗?
我正在阅读MSDN上有关do的一些文档,而不是关于某些内容是作为属性还是作为方法实现的.我特别遇到一个规则,我有一个问题.
如果"操作返回数组"使用方法(而不是属性).
页面在这里:在属性和方法之间进行选择
使用操作返回数组的方法,因为要保留内部数组,您必须返回数组的深层副本,而不是对属性使用的数组的引用.这一事实,加上开发人员使用属性就好像是字段一样,可能会导致代码效率非常低下.
我知道属性的get方法会返回对数组的引用,这样即使没有set也可以更改数组.在他们提供的示例中,每次访问属性时,他们都会对数组进行深层复制,我想这是为了避免发生这种情况的可能性,而这反过来效率非常低.
如果属性刚刚返回引用并且没有完成所有复制,那么效率不高,对吧?并且使用方法而不是属性不会自动保护列表不被修改.这几乎是相同的情况,你仍然需要一个深层复制.
使用属性只是返回对数组的引用总是不好的做法?如果您希望调用者能够修改数组,或者您不关心它们是否修改它,该怎么办?它仍然是坏的,为什么,如果是这样,什么是允许调用者修改的正确方法?
我们有一个ng-repeat指令,它使用ng-hide进行动画显示并根据选定的索引进行隐藏.动画在除Firefox之外的所有浏览器中都能正常工作.
在Firefox中,.ng-hide-remove的动画不起作用.你可以看到它移动了一点并停下来.我使用的是Firefox版本33.0但我也试过32.0.
只有Angular 1.3才会出现此问题,相同的代码在Firefox中使用角度版本1.2.
这是重复代码
<div class="item" ng-repeat="item in items" ng-show="$index == selectedItem" >
Item: {{item}}
</div>
Run Code Online (Sandbox Code Playgroud)
以下是css样式:
.item {
position:absolute;
top:50px;
left:200px;
border:solid 1px black;
padding:10px;
background-color:#f5f5f5;
width:100px;
}
.item.ng-hide-add {
-webkit-animation: fadeInLeft 1.5s;
animation: fadeInLeft 1.5s;
}
.item.ng-hide-remove {
-webkit-animation: fadeOutRight 1.5s;
animation: fadeOutRight 1.5s;
}
Run Code Online (Sandbox Code Playgroud)
这是一个包含完整演示的plunker:http://plnkr.co/edit/UFI6eWqfnDcCkpIe6d1i?p = preview
任何帮助将非常感激.我做错了什么,或者这是我遇到的真正的角色错误?谢谢!
简单的问题,但我似乎无法找到答案.
元数据ValidationProperty和ValidationPropertyAttribute元数据属性有什么区别?
我试图在SQL服务器中编写一个参数化查询,该参数使用参数值作为XPath的一部分,但它似乎不像我期望的那样工作.这是我的样本:
create table ##example (xmltest xml)
declare @LanguagePath varchar(75)
set @LanguagePath = '(/languages/language[@id="en-US"])[1]'
insert into ##example
values ('<languages>
<language id="en-US">c</language>
<language id="es-ES">c</language>
</languages>')
insert into ##example
values ('<languages>
<language id="en-US">b</language>
<language id="es-ES">b</language>
</languages>')
insert into ##example
values ('<languages>
<language id="en-US">a</language>
<language id="es-ES">a</language>
</languages>')
--This is a working statement:
--select * from ##example
--order by xmltest.value('(/languages/language[@id="en-US"])[1]', 'varchar')
declare @SQL nvarchar(4000)
set @SQL = '
select * from ##example
order by xmltest.value(@LanguagePath1, ''varchar'')
'
exec sp_executesql @SQL, N'@LanguagePath1 varchar(75)', @LanguagePath1 = @LanguagePath; …Run Code Online (Sandbox Code Playgroud) 简单的问题.使用类型化数据集表适配器时使用using语句很重要吗?我在网上看到的大多数例子都不使用using语句.
using (Data_ItemTableAdapter adapter = new Data_ItemTableAdapter())
{
DataItemTable = a.GetDataByDataItemID(DataItemID);
// more code here
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!!
编辑:似乎是一个普遍的共识是,它可能是在这种情况下使用"使用"是个好主意,因为它肯定不会伤害,它并不需要太多的努力.只是不确定是否值得回顾这个旧项目并更改所有代码.感谢您的建议!
当突出显示当前所选html元素的开始和结束标记时,有没有办法让VS 2010更像VS 2008.
在Visual Studio 2008中,选定的html标记只是在元素的开始和结束标记上加上粗体字和<>字符,并且属性保持正常.
我可以在VS 2010中找到的唯一选项是突出显示整个选定的标签,属性和所有选项.我没有找到任何可以控制所选标签本身的东西.
有人知道一种让它更像旧编辑器的方法吗?
谢谢!
c# ×5
.net ×2
asp.net ×2
validation ×2
angularjs ×1
attributes ×1
base64 ×1
coding-style ×1
css ×1
dispose ×1
firefox ×1
ide ×1
javascript ×1
localization ×1
ng-animate ×1
performance ×1
security ×1
sql ×1
sql-server ×1
using ×1
xml ×1