我有一个List<T>变量,其中T在编译时是未知的.我需要像这样访问value类型的属性T
foreach(var item in items) // items is List<T>
{
item.value // this won't compile because T is unknown
}
Run Code Online (Sandbox Code Playgroud)
我知道<T>在我的情况下会有value财产.我该如何访问它?
在这篇伟大的文章中, Keith解释了Powershell中终止和非终止错误之间的区别.根据Keith从调用.NET对象或类型成员抛出的异常是非终止错误.
确实,如果我们定义这个.NET类进行测试:
$a = Add-Type 'public class bla { public static void bl() { throw new System.ApplicationException("test"); }}' -PassThru
Run Code Online (Sandbox Code Playgroud)
然后这个功能:
function tst { 1 | write-host; $a::bl(); 2 | Write-host }
Run Code Online (Sandbox Code Playgroud)
我们将看到,当调用tst函数时,异常似乎是非终止的:第二个Write-Host起作用.
但考虑一下:
function tst2 { try { tst } catch { "Catch!" } }
Run Code Online (Sandbox Code Playgroud)
如果我们打开文档,我们可以读到catch响应或处理脚本中的终止错误.在文章的整个文本中,文章所处理的错误在许多地方被称为"终止".
因此,当我们在第二个Write-Host上面运行该行时,不会运行但是catch块会运行.似乎我们的非终止错误突然终止了.
怎么会?
另一个观察结果是,有了旧的陷阱,它仍然是非终止错误:
function tst3 { tst trap { "Trap!" } }
Run Code Online (Sandbox Code Playgroud)
现在,从实际角度来看,我想要实现的目标如下.在一段代码中,我想终止从.NET代码抛出的异常.我想留下cmdlet终止的终止错误和cmdlet非终止的非终止错误.
我该如何实现这一目标?
例:
Do-Something
Call::Something()
Do-SomethingElse
Call::SomethingElse()
Do-YetMoreSomething
Call::YetMoreSomething()
Run Code Online (Sandbox Code Playgroud)
我想终止上面.NET调用的所有异常.我还想终止从cmdlet终止错误.我不想终止cmdlet中的非终止错误.
我已经阅读了很多关于终结器和IDisposableC#的内容.当我终于从终结者的这种可怕的混乱中清楚地看到IDisposable,突然间,突然间,出现了这个SafeHandle的事情.我的信念再次完全动摇了.我应该用什么?
StackOverflow上有很多关于此的问题.很多.但是我找不到答案:
比...快:
private static int Obvious(ulong v)
{
int r = 0;
while ((v >>= 1) != 0)
{
r++;
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
甚至
int r = (int)(Math.Log(v,2));
Run Code Online (Sandbox Code Playgroud)
我在这里假设一个64位Intel CPU.
一个有用的参考是Bit Hacks页面,另一个是fxtbook.pdf. 然而,虽然这些提供了解决问题的有用方向,但它们没有给出准备好的答案.
我正在使用一个可重用的函数,它只能为C#执行与_BitScanForward64和_BitScanReverse64类似的操作.
这是我的第一个问题.我试图找到一个答案,但老实说,不能确定我应该使用哪些条款,如果之前已被问到,那就很抱歉.
这就是:我在.txt文件中有数千条记录,格式如下:
(1, 3, 2, 1, 'John (Finances)'),
(2, 7, 2, 1, 'Mary Jane'),
(3, 7, 3, 2, 'Gerald (Janitor), Broflowski'),
Run Code Online (Sandbox Code Playgroud)
... 等等.第一个值是PK,其他3个是外键,第5个是字符串.
我需要在Javascript中将它们解析为JSON(或其他东西),但我遇到了麻烦,因为有些字符串有括号+逗号(在第3条记录上,"Janitor",例如),所以我不能使用子字符串...也许修剪正确的部分,但我想知道是否有一些更聪明的方法来解析它.
任何帮助将非常感激.
谢谢!
假设我和我正在处理的合作伙伴公司生活在一个采用夏令时的国家/地区。
我在 kubernetes 集群中有一个 CronJob,它每天在 4:00、10:00、16:00 和 22:00 将文件上传到合作伙伴公司。例如0 4,10,16,22 * * *。
Kubernetes SIG决定CronJob 对象将不支持本地时区,并将始终以默认时区运行,即 UTC。
我可以更改时间表,以便它反映上面在 UTC 中指定的本地时间,并为 CronJob 提供该时间表。但是,每次夏令时开始(一年两次)时,我都需要以某种方式修改所有 CronJobs 以使用新时间,并且我需要修改我的部署管道以使用新时间创建 CronJobs 的新版本。
在夏令时更改之后,我无法让 CronJob 以相同的时间表运行,因为该作业将不会在合作伙伴预期的时间内上传文件。
管理这个最简单的方法是什么?
选项1
有人建议编写一个新的 kubernetes 控制器可以做到,但似乎没有人提出这个挑战并发布工作解决方案。
选项 2
我考虑过的另一个选择是更改整个集群的时区。但是如果你用谷歌搜索它,它似乎并不是一个非常流行的解决方案,而且有些人强烈认为 kubernetes 作为一个云应用程序应该在 UTC 中运行。
据我所知,cron使用本地时区,在 kubernetes 的情况下,它将是控制器管理器的时区,它不是运行节点的时区所必需的。另一方面,更改控制器管理器容器的时区听起来有风险,因为尚不清楚它将如何与 Kubernetes 的其他组件(例如 etcd 和 kubelets)交互。
选项 3
每年手动执行两次。由于组织中的人来来去去,因此很难在何时以及如何保留知识。我不希望我们的合作伙伴一年抱怨两次。此外,由于日期每年都在变化,因此为此设置通知可能会很棘手。
选项 4
编写一些本土自动化以每年运行两次,并希望当时间到来时它按预期工作。这实际上是触发,在正确的时间触发并完成它应该做的一切。(后者更容易测试,但前者更难)。
所有这些选项都让人感到很不满意。我用谷歌搜索了很多,但我没有找到很多,我觉得这应该是很常见的问题,但搜索中没有任何内容。我是否忽略了什么?有没有简单自然的方法来解决它?
我正在基于DotNetOpenAuth实现OAuth2授权/资源服务器.我的服务器将发布具有很长使用寿命的访问令牌.这些令牌将用于iOS设备.流程,我看到的方式是这样的,1)要求用户在iOS设备上输入他们的用户名/密码2)请求访问令牌,授权类型为资源所有者密码凭证3)令牌被授予和存储在iOS设备上供将来使用.
现在用户不时被禁用.我想同时撤销令牌.我该怎么做呢?我怀疑我需要使用ICryptoKeyStore.RemoveKey方法,但不知道如何找到要删除的键.
注1:将来服务器将由第三方Web应用程序使用.
注2:要求获得资源所有者密码凭证的授权类型源于这样一个事实,即确定在iOS设备上实现浏览器重定向是不值得的.
更新1
源代码中的一些挖掘表明DotNetOpenAuth不支持强制令牌过期的能力.此外,在标准实现中,甚至不检查令牌的生存期.至于我能看到CALSS负责,这是StandardAccessTokenAnalyzer它忽略了Lifetime和UtcCreationDate性能.此外,标准ResourceServer类似乎没有任何数据库访问编码,令牌有效性仅由令牌内容检查,所以似乎如果我需要添加使令牌过期的能力,我需要ResourseServer自己连接到数据库.我错过了什么吗?
更新2 我想我在这里找到了答案:https://groups.google.com/forum/#!topic /dotnetopenid/aLabu1ujkt4这不是我所希望的,我仍然有一些不清楚.例如,安德鲁写道:
然后,您的自定义类可以获取访问令牌,然后使用私有HTTP请求到授权服务器以验证令牌的持续有效性.
目前尚不清楚这种验证是如何发生的,因为它AccessToken不包括授权ID.这可能使查找目标授权记录变得困难.从理论上讲,我们可以尝试通过客户端,用户和发布时间的组合来查找它,但据我所知,并不能保证它们是唯一的.
假设我有这样的函数:
var filterValue = GetCurrentFilter(state);
Run Code Online (Sandbox Code Playgroud)
然后是EF查询:
var result = context.EntitySet.Where(x=> x.column > filterValue);
Run Code Online (Sandbox Code Playgroud)
这有效,但一旦我试图内联:
var result = context.EntitySet.Where(x=> x.column > GetCurrentFilter(state));
Run Code Online (Sandbox Code Playgroud)
它不是因为EF Linq试图解析GetCurrentFilter到表达式树而无法做到这一点.这一切都是可以理解的.
我的问题是,有没有办法让EF Linq知道在GetCurrentFilter构建树时需要执行函数并在树中使用它的结果?
就像是
var result = context.EntitySet.Where(x=> x.column > EfUtil.ResultOf(GetCurrentFilter(state)));
Run Code Online (Sandbox Code Playgroud)
由于GetCurrentFilter没有参数作为查询的一部分,因此如果EF Linq可以支持它,那么技术上应该可以做到这一点.我怀疑我只是错过了正确的语法.
这编译:
string s = "my string";
unsafe
{
fixed (char* ptr = s)
{
// do some works
}
}
Run Code Online (Sandbox Code Playgroud)
这不是:
string s = "my string";
unsafe
{
fixed (char* ptr = (char*)s)
{
// do some works
}
}
Run Code Online (Sandbox Code Playgroud)
错误CS0030:无法将类型'string'转换为'char*'
我找不到c#规范中允许第一种语法但禁止第二种语法的地方.你能帮忙指出这里谈到的地方吗?
要获取包含子模块的项目,请在克隆项目后运行此命令:
git submodule init
Run Code Online (Sandbox Code Playgroud)
此命令.gitmodules将有关模块的信息读入和写入索引.
然后你跑
git submodule update
Run Code Online (Sandbox Code Playgroud)
它获得了子模块存储库的特定提交.
git如何知道特别提交哪个提交?这些信息存储在哪里?
我不理解这一点的原因是因为我可以看到它不在,.gitmodules但我认为它也不太可能在索引中,因为它将它git submodule init写入索引.所以它让这些信息没有合理的地方,我能想到的.
回答上述问题后,我们如何更改此提交编号,以便下次可以在不同的提交中检索子模块?
注意:我读过这个,这个和这个.我可能错过了,但我找不到问题的答案.
更新1
我想澄清下面关于larsks的答案.这是很好的答案,但我想澄清以下内容.
在答案中,使用git checkout a18306f命令.我想看看我是否有一个快捷方式来为分支上的最新提交执行此操作.为了运行此命令,我需要这样做:
git branch
## Note the current branch name, let's assume it's master,
## use this branch name in the following command
git log -1 origin/master
## Now note the commit number.
## This is where a18306f in the example above comes from in my use …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×4
cron ×1
exception ×1
git ×1
idisposable ×1
javascript ×1
json ×1
kubernetes ×1
linq ×1
list ×1
oauth-2.0 ×1
parsing ×1
powershell ×1