我对linq几乎一无所知.
我这样做:
var apps = from app in Process.GetProcesses()
where app.ProcessName.Contains( "MyAppName" ) && app.MainWindowHandle != IntPtr.Zero
select app;
Run Code Online (Sandbox Code Playgroud)
这让我获得了符合该标准的所有正在运行的进程.
但我不知道如何获得第一个.我可以在网上找到的例子似乎暗示我必须这样做
var matchedApp = (from app in Process.GetProcesses()
where app.ProcessName.Contains( "MyAppName" ) && app.MainWindowHandle != IntPtr.Zero
select app).First();
Run Code Online (Sandbox Code Playgroud)
这对我来说有点难看,如果没有匹配的进程也会抛出异常.有没有更好的办法?
UPDATE
我实际上是想找到第一个匹配的项目,然后打电话SetForegroundWindow给它
我想出了这个解决方案,这也让我感到丑陋和可怕,但比上面更好.有任何想法吗?
var unused = from app in Process.GetProcesses()
where app.ProcessName.Contains( "MyAppName" ) && app.MainWindowHandle != IntPtr.Zero
select SetForegroundWindow( app.MainWindowHandle ); // side-effects in linq-query is technically bad I guess
Run Code Online (Sandbox Code Playgroud) 我有一张桌子,里面装满了任意格式的电话号码,就像这样
027 123 5644
021 393-5593
(07) 123 456
042123456
Run Code Online (Sandbox Code Playgroud)
我需要以类似的任意格式搜索电话号码(例如,07123456应该找到条目(07) 123 456
我用普通编程语言执行此操作的方法是将所有非数字字符从"针"中删除,然后遍历大海捞针中的每个数字,从中删除所有非数字字符,然后进行比较针,例如(在红宝石中)
digits_only = lambda{ |n| n.gsub /[^\d]/, '' }
needle = digits_only[input_phone_number]
haystack.map(&digits_only).include?(needle)
Run Code Online (Sandbox Code Playgroud)
问题是,我需要在MySQL中执行此操作.它有许多字符串函数,其中没有一个看起来像我想要的那样.
目前我可以想到2'解决方案'
CONCAT和/ 的密切查询混为一谈SUBSTR%针的每个字符之间(所以它是这样的:%0%7%1%2%3%4%5%6%)然而,这些似乎都不是特别优雅的解决方案.
希望有人可以提供帮助,或者我可能会被迫使用%%%%%%解决方案
如果数据集增长,我将采用'phoneStripped'方法.感谢您的所有反馈!
你可以使用"替换"功能去掉任何"("," - "和""的实例,
我并不担心结果是数字的.我需要考虑的主要特点是+,-,(,)并space
因此将是解决这个样子?
SELECT * FROM people
WHERE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(phonenumber, '('),')'),'-'),' '),'+')
LIKE '123456'
Run Code Online (Sandbox Code Playgroud)
这不是非常慢吗?
我为一个软件供应商工作,他的市场是开发人员工具,我们一直在为我们的产品寻找QA人员.
由于我们是一家小店,因此我们将支持和QA结合起来,因为我们制作开发人员工具,我们的支持主要包括实际开发(因为这个人必须阅读并理解我们的客户代码并查找并指出错误在里面).
质量保证部分还包括编写应用程序(在各种平台和语言中)并测试它们如何使用我们的工具.
我遇到的主要问题是当你告诉有开发经验的人时,这个职位包含"QA"它的标题(甚至在工作描述中)他们不愿意考虑这份工作.
我对如何找到一个好人填补这份工作的反馈和建议非常感兴趣,并确保他们很乐意这样做.有任何想法吗?
我有一些代码以编程方式创建自动布局约束,并将它们添加到视图中.
有两种方法可以做到这一点 - 调用addConstraintssuperView,或者设置.isActive = true每个约束(内部调用addConstraint)
选项1:
parent.addConstraints([
child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20),
child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5) ])
Run Code Online (Sandbox Code Playgroud)
选项2:
child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20).isActive = true
child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5).isActive = true
Run Code Online (Sandbox Code Playgroud)
我的问题是,做一个比另一个有什么好处吗?(表演/等)或它纯粹归结为风格.
(我不认为约束会在下一个布局过程之前进行评估,所以我认为我们不能逐个添加它们而不是在块中?)
如果它只是风格,那么社区的"更受欢迎"风格是什么?
(我个人更喜欢addConstraints,但它非常接近,我可以很容易地摇摆.isActive)
我有List<T>一些包含一些数据.我想把它传递给一个接受的函数ReadOnlySpan<T>.
List<T> items = GetListOfItems();
// ...
void Consume<T>(ReadOnlySpan<T> buffer)
// ...
Consume(items??);
Run Code Online (Sandbox Code Playgroud)
在这个特定的例子中,T是,byte但它并不重要.
我知道我可以.ToArray()在List上使用,并构造一个span,例如
Consume(new ReadOnlySpan<T>(items.ToArray()));
Run Code Online (Sandbox Code Playgroud)
然而,这会创建(看似)不必要的项目副本.有没有办法直接从列表中获取Span?List<T>是在T[]幕后实施的,所以从理论上来说这是可能的,但在实践中并没有我能看到的那么多?
我最近被要求解决使用Microsoft的Composite UI Application块构建的应用程序中的一些性能问题 - 特别是它需要很长时间才能加载.
这是围绕Microsoft的ObjectBuilder依赖注入框架构建的,该框架使用反射/属性来注册类.分析表明,在启动时,应用程序花费了大量时间进行反射,因为ObjectBuilder会扫描每个已加载程序集中的每个类型,以搜索要注册的内容.
替代DI框架似乎也使用属性,XML配置或纯代码.
看起来似乎没有任何其他基于属性的框架会更好,而且我对启动时也持怀疑态度,因为必须解析成堆的XML等等.
基于纯代码的框架看起来应该更快,但是它们也不那么灵活,所以它看起来并不是一个明确的好选择......
这导致我搜索DI容器基准测试,但我能找到的唯一一个就是这个:http : //www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html.
虽然它是一个很好的基准,但它只测量使用容器创建100万个对象的速度.我没有兴趣创建100万个对象,我只是希望应用程序尽快启动,所以我正在寻找的是有关DI Container 启动成本的任何信息,无论是博客文章,轶事,甚至是什么简单的"这是一种使ObjectBuilder更快"的方法.
提前致谢
我搜索了一下,但没有找到满意的答案,所以我想听听你对此的看法.
我有几个工具,我必须不时更新和部署到几个服务器.源在SVN存储库中管理.
为了省去通过ftp或类似手段将二进制文件复制到生产服务器的麻烦(我无法在服务器上构建项目),我正在考虑在存储库中创建一个区域来提交它们.然后,我可以在需要时从svn服务器中简单地检索最新版本的可执行文件.
由于我不一定要在每次处理源代码时更新/提交二进制文件,因此我不会将二进制文件的文件夹创建为项目的子文件夹.然后(并且应该)承诺二进制文件是一个单独的,有意识的行为.
--- trunk
--- project1
--- project2
--- built
--- project1
--- project2
Run Code Online (Sandbox Code Playgroud)
据我所知,这个设置应该没有问题.我真正喜欢的是然后为源修订版和二进制文件提供单个标记,以便能够一次性检索所有属于一起的内容.
--- tags/project1/release2/
includes files from
--- trunk/project1/ revision 487 and
--- built/project1/ revision 488
Run Code Online (Sandbox Code Playgroud)
我能追求的是什么,我将如何实现它?我应该改为寻找解决这个问题的其他方法吗?
所以我有这个快速的代码:
func didReceiveResponse(response:String) {
...
let substr = response[11...]
Run Code Online (Sandbox Code Playgroud)
根据我的解释,substr应该是一个子串,引用响应字符串中索引11之后的所有字符.
实际发生的是这个编译器错误:
Cannot subscript a value of type 'String' with an index of type 'CountablePartialRangeFrom<Int>'
这似乎应该是显而易见的,有人可以帮忙吗?
我有一些使用 RxSwift 构建的代码,我正在尝试将其转换为使用 Apple 的 Combine 框架。
一种非常常见的模式是使用Observable.create一次性可观察对象(通常是网络请求)。像这样的东西:
func loadWidgets() -> Observable<[Widget]> {
return Observable.create { observer in
// start the request when someone subscribes
let loadTask = WidgetLoader.request("allWidgets", completion: { widgets in
// publish result on success
observer.onNext(widgets)
observer.onComplete()
}, error: { error in
// publish error on failure
observer.onError()
})
// allow cancellation
return Disposable {
loadTask.cancel()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其映射到结合,但我一直无法弄清楚。我能得到的最接近的是使用 Future 来做这样的事情:
func loadWidgets() -> AnyPublisher<[Widget], Error> {
return Future<[Widget], Error> { resolve in
// …Run Code Online (Sandbox Code Playgroud) 我有一个不可复制但可移动的资源包装类。像这样的东西(伪代码)
class Wrapper {
SomeResource* m_handle = nullptr;
public:
Wrapper(const Wrapper&) = delete;
Wrapper& operator=(const Wrapper&) = delete;
Wrapper(SomeResource* handle) : m_handle(handle) { }
Wrapper(Wrapper&& other) {
std::swap(m_handle, other.m_handle);
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但是我有很多这些,并且我有一个函数可以解析一些数据并返回包装器或替代包装器。我想到用std::variant返回值来表达这一点。例如
std::variant<Wrapper, AlternativeWrapper> LoadData(void* bytes, size_t len)
{ ... }
Run Code Online (Sandbox Code Playgroud)
我可以编写这个函数,并且它全部可以编译。即,我在 LoadData 函数内构造一个 Wrapper,然后我可以将其移动到随后返回的变体中。
但另一方面,当我想获取值时,出现此错误(MSVC2019)
error C2280: 'Wrapper::Wrapper(const Wrapper&)': attempting to reference a deleted function
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样。
auto result = LoadData(bytes, len);
std::get<Wrapper>(result);
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为结果仍然存在,但是我如何访问它呢?