我想将属性传递给函数,以便函数知道属性的值和属性的名称。这样我就可以返回与属性名称匹配的错误。
我目前有这样的代码:
var userNameField = personField.GetChildField(f => f.UserName, nameof(personField.Value.UserName));
重复多次,所以第二个参数是第一个参数lambda内属性的名称。
是否可以自动执行此参数:
理想情况下,我希望我的代码看起来像:
var userNameField = personField.GetChildField(f => f.UserName);
我使用Expression<Func...
使用反射工作,即((MemberExpression) getPropertyFunc.Body).Member.Name;
,但这太慢了,特别是将表达式编译成一个函数,我可以用它来获取属性值。
同样,我已经阅读了这里的想法:Get name of property as a string
有没有办法在编译时从GetChildField
函数填充属性名?或者以某种方式将其编码到模型中?
答案 0 :(得分:0)
可以通过以下方式实现:
Item model=new Item();
var propertyInfo = model.GetType();
var value=propertyInfo.GetProperty("IrrA").GetValue(model, null).ToString();
答案 1 :(得分:-1)
根据Roslyn文档here,m_pZed = new sl::Camera();
sl::InitParameters zedInit;
zedInit.camera_buffer_count_linux = 4;
zedInit.camera_disable_self_calib = false;
zedInit.camera_fps = m_zedFPS;
zedInit.camera_image_flip = m_bZedFlip;
zedInit.camera_linux_id = 0;
zedInit.camera_resolution = (sl::RESOLUTION) m_zedResolution;
zedInit.coordinate_system = sl::COORDINATE_SYSTEM::COORDINATE_SYSTEM_IMAGE;
zedInit.coordinate_units = sl::UNIT::UNIT_METER;
zedInit.depth_minimum_distance = m_zedMinDist;
zedInit.depth_mode = (sl::DEPTH_MODE) m_zedDepthMode;
zedInit.sdk_gpu_id = -1;
zedInit.sdk_verbose = true;
sl::ERROR_CODE err = m_pZed->open(zedInit);
if (err != sl::SUCCESS)
{
LOG(ERROR)<< "ZED Error code: " << sl::errorCode2str(err) << std::endl;
return false;
}
m_pZed->setConfidenceThreshold(m_zedConfidence);
m_pZed->setDepthMaxRangeValue((float) m_zedMaxDist);
// Set runtime parameters after opening the camera
m_zedRuntime.sensing_mode = (sl::SENSING_MODE) m_zedSenseMode;
m_zedRuntime.enable_depth = true;
m_zedRuntime.enable_point_cloud = false;
m_zedRuntime.move_point_cloud_to_world_frame = false;
// Create sl and cv Mat to get ZED left image and depth image
sl::Resolution zedImgSize = m_pZed->getResolution();
// Initialize color image and depth
m_width = zedImgSize.width;
m_height = zedImgSize.height;
m_centerH = m_width / 2;
m_centerV = m_height / 2;
// Best way of sharing sl::Mat and cv::Mat :
// Create a sl::Mat and then construct a cv::Mat using the ptr to sl::Mat data.
m_pzDepth = new sl::Mat(zedImgSize, sl::MAT_TYPE_32F_C1, sl::MEM_GPU);
m_gDepth = slMat2cvGpuMat(*m_pzDepth);
m_gDepth2 = GpuMat(m_gDepth.size(), m_gDepth.type());
运算符在编译时评估&#34; Semantics&#34;阅读
表达式的名称是常量。在所有情况下,在编译时评估nameof(...)以生成字符串。它的参数在运行时不会被评估,并且被认为是无法访问的代码(但它不会发出&#34;无法访问的代码&#34;警告)。