为了简化,假设我有一个方法应该从用户列表中找到的ID返回User对象。如果没有找到用户,我想抛出异常。
我目前的代码有效:
public User GetUserFromID(int id)
{
foreach (User u in Users)
if (u.id == id)
return u;
throw new Exception("No user is found");
}
但是当我想找到一个带有Lambda表达式而不是foreach循环的用户时,我的问题就来了。以下代码成功返回正确的User对象,但如果未找到任何内容,则不会抛出异常。
public User GetUserFromID(int id)
{
return Users.Find(u => u.id == id);
throw new Exception("No user is found");
}
希望你能提供帮助: - )
答案 0 :(得分:1)
你可以使用User.Single(...),如果没有一个匹配就会抛出异常:
/*global require,console,setTimeout */
var opcua = require("node-opcua");
var async = require("async");
var fs = require("fs");
var csv = require("fast-csv");
var sleep = require("system-sleep");
var client = new opcua.OPCUAClient();
var endpointUrl = "opc.tcp://" + require("os").hostname() + ":4334/UA/MyLittleServer";
var the_session, the_subscription;
async.series([
// step 1 : connect to
function(callback) {
client.connect(endpointUrl,function (err) {
if(err) {
console.log(" cannot connect to endpoint :" , endpointUrl );
} else {
console.log("connected !");
console.log("Endpoint URL ", endpointUrl);
}
callback(err);
});
},
// step 2 : createSession
function(callback) {
client.createSession( function(err,session) {
if(!err) {
the_session = session;
}
callback(err);
});
},
// step 3 : browse
function(callback) {
the_session.browse("RootFolder", function(err,browse_result){
if(!err) {
browse_result[0].references.forEach(function(reference) {
console.log( reference.browseName.toString());
});
}
callback(err);
});
},
// step 4 : read a variable with readVariableValue
//function(callback) {
// the_session.readVariableValue("ns=2000;s=TEST", function(err,dataValue) {
// if (!err) {
// console.log(" free mem % = " , dataValue.toString());
// }
// callback(err);
// });
//},
// step 4' : read a variable with read
//function(callback) {
// var max_age = 0;
// var nodes_to_read = [
// { nodeId: "ns=2000;s=TEST", attributeId: opcua.AttributeIds.Value }
// ];
// the_session.read(nodes_to_read, max_age, function(err,nodes_to_read,dataValues) {
// if (!err) {
// console.log(" free mem % = " , dataValues[0]);
// }
// callback(err);
// });
//},
// function(callback){
// the_session.readVariableValue("ns=74;s=Dou", function(err,dataValue) {
// if(!err){
// console.log("Test Success", dataValue.toString());
// }
// callback(err);
// });
// },
//
// function(callback){
// the_session.readVariableValue("ns=74;s=Float", function(err,dataValue) {
// if(!err){
// console.log("Test Success", dataValue.toString());
// }
// callback(err);
// });
// },
//
// function(callback){
// the_session.readVariableValue("ns=74;s=String", function(err,dataValue) {
// if(!err){
// console.log("Test Success", dataValue.toString());
// }
// callback(err);
// });
// },
// function(callback){
// the_session.readVariableValue("ns=1;s=CSV", function(err, dataValue) {
// if(!err){
// console.log(dataValue.toString());
// sleep(5000);
// }
// callback(err);
// });
// },
// function(callback){
// the_session.readVariableValue("ns=1;s=CSV", function(err, dataValue) {
// if(!err){
// fs.createReadStream(dataValue.toString())
// console.log(dataValue.toString());
// sleep(5000);
// .pipe(csv())
// .on('data', function(data){
// console.log(csv);
// sleep(5000);
// })
// .op('end', function(data){
// console.log("Read Finish")
// });
// }
// callback(err);
// });
// },
// step 5: install a subscription and install a monitored item for 10 seconds
function(callback) {
the_subscription=new opcua.ClientSubscription(the_session,{
requestedPublishingInterval: 1000,
requestedLifetimeCount: 10,
requestedMaxKeepAliveCount: 2,
maxNotificationsPerPublish: 10,
publishingEnabled: true,
priority: 10
});
the_subscription.on("started",function(){
console.log("subscription started for 2 seconds - subscriptionId=",the_subscription.subscriptionId);
}).on("keepalive",function(){
console.log("keepalive");
}).on("terminated",function(){
callback();
});
setTimeout(function(){
the_subscription.terminate();
},10000000);
// install monitored item
var monitoredItem = the_subscription.monitor({
nodeId: opcua.resolveNodeId("ns=2000;s=TEST"),
attributeId: opcua.AttributeIds.Value
},
{
samplingInterval: 100,
discardOldest: true,
queueSize: 10
},
opcua.read_service.TimestampsToReturn.Both
);
console.log("-------------------------------------");
monitoredItem.on("changed",function(dataValue){
console.log(" New Data Receive = ",dataValue.value.value);
});
},
// close session
function(callback) {
the_session.close(function(err){
if(err) {
console.log("session closed failed ?");
}
callback();
});
}
],
function(err) {
if (err) {
console.log(" failure ",err);
} else {
console.log("done!");
}
client.disconnect(function(){});
}) ;
为了完整,如果你想抛出自己的异常,那么你可以做这样的事情。
如果没有匹配或者匹配次数超过1,则public User GetUserFromID(int id)
{
return Users.Single(u => u.id == id);
}
将返回SingleOrDefault
,因此您可以检查null
以确定是否应抛出异常:< / p>
null
答案 1 :(得分:0)
$('#playfield tr td').click(function() {
newImageSrc = 'img/newImage.png';
$(this).children().attr('src', newImageSrc);
})
public User GetUserFromID(int id)
{
return Users.Single(u => u.id == id);
}
会在没有一个匹配时抛出异常。