我有以下示例代码(仅用于C#3.5学习目的!).
我正在调用接受IEnumerable和sort函数的Sort函数.如果我使用lambda表达式调用它(案例A),编译器可以派生返回类型TResult,但是当我传递func SortInt(案例B)时,编译器会抛出错误!
我无法理解为什么编译器在第二种情况下无法派生TResult!我似乎传递了完全相同的信息.或者这不准确?
请帮忙 !
int[] intArray = { 1, 3, 2, 5, 1 };
IEnumerable<int> intArray2 = Sort(intArray, x => SortInt(x)); // <= CASE A - OK !
IEnumerable<int> nextIntArray = Sort(intArray, SortInt); // <= CASE B - Compile Error: Cannot Infer Type !
public static IEnumerable<TResult> Sort<T, TResult>(IEnumerable<T> toBeSorted,
Func<IEnumerable<T>, IEnumerable<TResult>> sortFunc)
{
return sortFunc(toBeSorted);
}
public static IEnumerable<int> SortInt(IEnumerable<int> array)
{
return array.OrderByDescending(x => x);
}
Run Code Online (Sandbox Code Playgroud) 当我用g ++编译下面的代码时,在构造类C的对象时,类A的对象似乎不会被破坏,并且当由类C的对象的构造函数访问时,B.ref_a引用不会被破坏:
#include <iostream>
struct A
{
A(int aa)
{
a = aa;
}
~A()
{
std::cout << "A out" << std::endl;
}
int a;
};
struct B
{
B(const A& a)
: ref_a(a)
{
}
~B()
{
std::cout << "B out" << std::endl;
}
const A& ref_a;
};
struct C
{
C(const B& b)
{
c = b.ref_a.a + 1;
}
int c;
};
int main(void)
{
C c(B(A(1)));
std::cout << c.c << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,它是否由C++语言保证?
以下代码按预期工作.但我不能格式化输出.它会打印出这样的东西:
mysql
test
someDB
Run Code Online (Sandbox Code Playgroud)
我希望输出在一行上
mysql test someDB
Run Code Online (Sandbox Code Playgroud)
我尝试在脚本中使用sed但它没有用.
#!/bin/sh
for dbName in `mysqlshow -uroot -pPassWord | awk '{print $2}'`
do
echo "$dbName" | egrep -v 'Databases|information_schema';
done
Run Code Online (Sandbox Code Playgroud) 我能怎么做?
我使用以下代码来确定是否存在互联网连接.
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr*)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags) {
NSLog(@"Error. Could not recover network reachability flags");
return 0;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
Run Code Online (Sandbox Code Playgroud)
当我的设备连接到wifi网络时,此方法返回预期结果.但是,如果我在3G或Edge网络上测试相同的方法,它会返回NO(即未连接到互联网)
有什么想法吗?
谢谢.
我究竟做错了什么?在Mac(2GB RAM)上使用Eclipse时遇到了以下问题:
每当我尝试创建一个超过8384896字节的数组时,我就会出现分段错误.以下程序将执行:
#include <stdio.h>
main()
{
double x[1048112];
printf("sizeof(x) = %li", sizeof(x));
}
Run Code Online (Sandbox Code Playgroud)
输出将是(如预期的那样):
sizeof(x)= 8384896
但是增加x中的元素数量或在main()中创建其他变量会导致无法执行的程序和段错误.看起来我正在达到一些内存限制,我不明白为什么会发生这种情况.如果有人能向我解释这个问题,或者可能为我的问题提供某种解决方案,我将非常感激.